【问题标题】:Fuzzy search not working with dismax query parser模糊搜索不适用于 dismax 查询解析器
【发布时间】:2015-06-18 07:30:05
【问题描述】:

我的模式“fullText”中有一个字段是“text_en”类型,并且是多值的。术语“测试”位于一个文档的全文字段中。

在 solr 中,当我尝试使用“test”一词进行搜索时,使用最小距离为 1 的标准 lucene 解析器,它会返回文档。我正在使用的查询是:

http://localhost:8983/solr/simple/select?q=fullText:test~1&wt=xml&indent=true

但我正在使用 dismax 做同样的事情,并且它没有返回文档。我尝试过的查询是:

http://localhost:8983/solr/simple/select?q=test&wt=xml&indent=true&defType=dismax&qf=fullText~1

http://localhost:8983/solr/simple/select?q=test~1&wt=xml&indent=true&defType=dismax&qf=fullText

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    DisMax 在设计上不支持其查询参数中的所有 lucene 查询语法。来自the documentation

    此查询解析器支持 Lucene QueryParser 语法的一个极其简化的子集。引号可用于对短语进行分组,+/- 可用于表示强制和可选子句……但所有其他 Lucene 查询解析器特殊字符都被转义以简化用户体验。

    模糊查询是不支持的事情之一。有一个request to add it to the qf parameter,如果你愿意看一下,但它还没有实现。

    一个好的解决方案是转至edismax query parser。它的查询参数支持完整的lucene查询解析器语法:

    http://localhost:8983/solr/simple/select?q=test~1&defType=edismax&qf=fullText
    

    【讨论】:

    • 使用 edismax 它正在工作。但我想知道是否有任何过滤器(编辑距离过滤器)可以放入 scheme.xml 部分的“ .. ' 让我的工作更轻松、更简单?
    • @Shobhit_Geek 当然,您可以使用一些分析技术。例如,N-gram。在我看来,没有什么比编写一个表达您需要搜索的内容的查询更简单或通常更有效的了。编辑距离过滤器的想法并没有真正意义,因为分析一次只能对一半的比较进行操作。不太确定你在那里提出什么建议。
    • N-gram 对我没有帮助。我的文档中有 4 个字段,分别是书名、作者、字段、全文。 fullText 基本上是一个多值复制文本字段,我在其中复制所有字段。要在全文中搜索,我想使用距离为 1 的模糊搜索。假设用户正在搜索“python”,那么应该对所有标记进行搜索(ython、pthon、pyton , phython , pithon 等) 全文。在其他领域,搜索应该以正常方式进行。如果我在查询中使用模糊搜索,那么它将对所有字段使用模糊搜索。这种情况不知道怎么处理?
    • 这样写你的查询。您可以使用标准 lucene 语法覆盖查询中的 qf 字段:q=test fullText:test~1&qf=name author field
    • qf 在标准 lucene 解析器中不受支持。无论如何,我明白了你的意思。最后一个问题是什么意思:'编辑距离过滤器的想法实际上没有意义,因为分析一次只能对一半的比较进行操作'?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2017-08-07
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多