Lucene/Elasticsearch/Solr中最少的单词匹配数
问题描述:
我查询的文本(和查询本身)平均有11个单词(最多约25个)。我希望我的查询仅在查询中的至少一半单词在文本中匹配时才返回匹配。Lucene/Elasticsearch/Solr中最少的单词匹配数
例如,这是我最初的Lucene的查询的样子(为简单起见,它只有4个字):
jakarta~ apache~ lucene~ stackoverflow~
它会返回一个匹配,如果的话至少一个模糊匹配,但我只有当至少有任何两个单词(半数4个)模糊匹配时才希望它返回匹配。
在Lucene中可能吗?
我可能分裂我这样的查询(OR
是Lucene的默认运算符):
(jakarta~ apache~) AND (lucene~ stackoverflow~)
但不会返回匹配既是jakarta
和apache
匹配但没有lucene
和stackoverflow
匹配。
我可以改变我的查询:
(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中可能吗?
对于数据库中至少10 000个文本,它应该工作得很快(< = 0.5秒/搜索)。
如果我稍后可以轻松更改最低匹配百分比(例如,40%而不是50%),那就更好了,但我可能不需要这样做。
答
所有三个选项都支持可选查询子句中的最小匹配功能。
Lucene:通过
BooleanQuery.Builder.setMinimumShouldMatch
方法在BooleanQueries中设置。Solr:The DisMax
mm
parameter。Elasticsearch:本
minimum_should_match
参数,在Bool查询,Multi Match查询等
这看起来像我后。我会尝试Solr,谢谢! – Rusty