0

在 Solr/Lucene 中,最好的方法是索引文本列以表现得像 SQL 一样LIKE '%foo%,其中最佳匹配首先出现?在我的情况下,“最佳”意味着首先是完全匹配,然后是更少的额外字符,然后是更多的额外字符。例如

搜索“1234”应该返回

  • 1234
  • 12345(一个额外的字符)
  • 01234
  • 123456(两个额外的字符)
  • 001234567890
  • 等等

到目前为止我已经尝试过并且不太有效(列映射为text_en_splitting

  • 搜索1234-> 仅完全匹配
  • 搜索*1234*-> 找到所有内容,但没有获得更高的精确匹配分数
  • search for 1234~-> 将匹配 12345 但不会获得更高的精确匹配。不会匹配较长的字符串,例如“001234567890”。
4

1 回答 1

0

要获得更高的完全匹配分数,您可能需要在您的字段中搜索将提供所有匹配项,而第二个字段将仅产生完全匹配项(有一些提升)。

为了避免在查询中使用星号(它们会减慢搜索速度),您可以在架构中使用NGramFilterFactory

请记住,您的查询可能如下所示:

q=1234&qf=ngram_text_field,simple_text_field^2&defType=edismax

有关edismax 的更多信息

于 2013-05-16T21:43:54.957 回答