Lucene / Elasticsearch / Solr中的最小字匹配数

时间:2016-08-17 13:09:16

标签: elasticsearch solr lucene

我查询的文本(以及查询本身)平均有11个单词(最多约25个)。我希望我的查询只有在查询中至少有一半的单词在文本中匹配时才返回匹配。

例如,这是我最初的Lucene查询的样子(为简单起见,它只有4个单词):

jakarta~ apache~ lucene~ stackoverflow~

如果至少有一个单词是模糊匹配的话,它会返回一个匹配但我希望它只在至少任意两个(一半的4个)单词模糊匹配时返回一个匹配。

Lucene有可能吗?

我可以像这样分割我的查询(OR是Lucene中的默认运算符):

(jakarta~ apache~) AND (lucene~ stackoverflow~)

但是,如果jakartaapache匹配,则不会返回匹配项,但lucenestackoverflow都不匹配。

我可以将查询更改为:

(jakarta~ AND apache~) (jakarta~ AND lucene~) (jakarta~ AND stackoverflow~)
(apache~ AND lucene~) (apache~ and stackoverflow~) (lucene~ AND stackoverflow~)

这会有效吗?平均而言,我的表达式包括462 AND个子句(二项式系数为11和6),最坏的情况是5200300 AND个子句(二项式系数为25和13)。

如果在Lucene中不可能(或没有明智的表现),可以在Elasticsearch或Solr中使用吗?

它应该能够快速(<= 0.5秒/搜索)在数据库中至少10000个文本。

如果我以后可以轻松更改最低匹配百分比(例如40%而不是50%)会更好。但我可能不需要这个。

2 个答案:

答案 0 :(得分:2)

所有三个选项都支持可选查询子句中的最小匹配功能。

答案 1 :(得分:0)

在Solr中,您可以将minimum match (mm) parameter与DisMax和eDisMax一起使用,并且可以指定预期匹配的百分比。

相关问题