【发布时间】:2016-08-17 13:09:15
【问题描述】:
我查询的文本(以及查询本身)平均有 11 个词(最多约 25 个)。我希望我的查询仅在查询中至少有一半的单词在文本中匹配时才返回匹配项。
例如,这就是我最初的 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 条文本,它应该可以快速运行(
如果我以后可以轻松更改最小匹配百分比(例如 40% 而不是 50%)会更好,但我可能不需要这个。
【问题讨论】:
标签: elasticsearch solr lucene