【问题标题】:Minimum number of word matches in Lucene / Elasticsearch / SolrLucene / Elasticsearch / Solr 中的最小单词匹配数
【发布时间】:2016-08-17 13:09:15
【问题描述】:

我查询的文本(以及查询本身)平均有 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 中是否可行?

对于数据库中至少 10 000 条文本,它应该可以快速运行(

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

【问题讨论】:

    标签: elasticsearch solr lucene


    【解决方案1】:

    所有三个选项都支持可选查询子句之间的最低应匹配功能。

    【讨论】:

    • 谢谢。有没有办法在查询解析器语法中使用BooleanQuery.Builder.setMinimumShouldMatch?我通过 Neo4j REST API 使用 Lucene。我可以使用自定义的 Lucene 分析器。
    • @Rusty - 不,恐怕标准查询解析器不支持它,而且我对 Neo4j 真的不够熟悉,无法建议那里的最佳方法。
    【解决方案2】:

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

    【讨论】:

    • 这看起来像我所追求的。那我试试 Solr,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多