如何扩展Solr术语组件功能

时间:2014-07-28 20:02:59

标签: solr autocomplete components autosuggest term

我使用的是solr条款组件,效果很好。

但是,现在我需要另一个字段的术语组件过滤器。我想保留术语组件,因为它可以以不区分大小写的方式搜索,使用正则表达式可以搜索单词/短语中的单词(不必是前缀),术语组件结果很容易解析并返回我的确切信息想要自动完成,但我想过滤一个额外的字段。

有没有办法实现或扩展此组件功能?我不想使用solr facet,因为它只搜索前缀,并且不会以不区分大小写的方式搜索中间的单词(或者我错了?)。

如果你们有另外一个解决方案,请告诉我,但基本上我想要:

  1. 在多值字段上实施solr自动建议
  2. 按其他字段过滤建议
  3. 我的自我提示搜索应该不区分大小写
  4. 自我暗示搜索应该建议中间的单词。 Field = "Hello World"。查询"wor"应返回示例字段。

1 个答案:

答案 0 :(得分:0)

很抱歉,似乎无法过滤术语组件。正如documentation

中提到的那样
  

从某种意义上说,这个组件提供了整个索引的快速字段分面(不受基本查询或任何过滤器的限制)

你应该采取另一种策略

  • 将原始多值字段(您要搜索的字段)复制到另外两个字段中。
  • 在一个字段上,在对您的值进行标记化(例如空格)后应用edgengrams,我们称之为 keyword_ngram
  • 在另一个上相同,但不要将其标记化......并且也应用edgengrams phrase_ngram

最后,让我们假设你已经索引了以下单词&短语:

  • 棕色狐狸
  • 红糖
  • 蜂蜜是糖
  • 狐狸是棕色的

现在,使用以下qf进行edismax搜索: keyword_ngram ^ 1 phrase_ngram ^ 2

这意味着确切的词组匹配将比关键词匹配更好。

我们假设你搜索?q=brow,结果应该是:

  • 棕色狐狸
  • 红糖
  • 狐狸是棕色的

但是如果你搜索?q=brown f,结果应该是:

  • 棕色狐狸
  • 狐狸是棕色的

最后,在您需要的字段上应用简单的query filter ...

最后,一个优秀的concept of solr autocompletion。效果很好,可以过滤。