Solr / Lucene - 与得分相当的LIKE'%foo%'

时间:2013-05-16 17:51:02

标签: solr lucene

Solr / Lucene索引文本列的行为类似于最先匹配的SQL LIKE '%foo%,最好的方法是什么?在我的情况下,“最佳”意味着首先是完全匹配,然后在更多额外之前减少额外字符。例如

搜索“1234”应该返回

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

到目前为止我尝试过的内容并不常用(列映射为text_en_splitting

  • 搜索1234 - >只有完全匹配
  • 搜索*1234* - >找到所有内容,但没有得到更高的匹配
  • 搜索1234~ - >将匹配12345,但不会得到更高的完全匹配。不会匹配更长的字符串,如“001234567890”。

1 个答案:

答案 0 :(得分:0)

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

要避免在查询中使用星号(它们会降低搜索速度),您可以在架构中使用NGramFilterFactory

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

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

有关edismax

的更多信息