【问题标题】:Solr Search Field Best PracticesSolr 搜索字段最佳实践
【发布时间】:2016-05-04 16:34:28
【问题描述】:

我将 solr 用于企业应用程序。到目前为止,它运行良好,因为我正在使用 ngram 字段进行搜索。它适用于部分查询(与索引 ngram 匹配)。但我遇到的问题是,如何强制执行精确的查询匹配?例如,查询“Test 1”应该匹配与用户使用双引号输入时完全相同的文本。目前由于我使用了一些标记器和过滤器,双引号被过滤掉了,查询"test 1", "tEst 1" or "TEST 1"没有区别(这是因为我使用了分析器链,但它需要与ngrams和部分搜索一起使用) .

目前我正在搜索一个 ngram 查询字段。为了强制执行精确查询匹配,我应该怎么做?什么是最佳做法?目前我认为是从客户端识别双引号并将查询字段更改为原始字段(没有ngrams)。但我觉得应该有更好的方法来做到这一点,因为我遇到的问题是通用的,solr 是一个完整的企业级搜索引擎。

【问题讨论】:

    标签: search solr enterprise


    【解决方案1】:

    您可以为其添加另一个field,并将string 添加为相同的fieldType,并使用相同的索引。

    当你想进行完全匹配时,你可以在上面的字段上查询。

    当你想进行部分搜索时..你可以查询到由 ngram 索引的较早的字段。

    或者..这是您可以尝试的另一种方法。

    您已经使用 ngram 定义了当前字段类型。在索引时,您可以定义 ngram 标记器,并且对于您提到关键字标记器和小写过滤器工厂的查询。

    在索引文本时将被标记化,而在执行查询时则不会。

    【讨论】:

    • 所以你的意思是,我应该从客户端识别双引号并据此更改查询字段吗?我想过这个问题,但这不是 solr 可能已经解决的通用问题吗?我在想我可能正在重新发明轮子
    • 但问题是,当用户故意输入带双引号的查询时,我该如何处理?在您的方法中,我们将不得不使用一种机制来规范化索引和查询两者,那么双引号就没有意义了。它也应该匹配区分大小写的字段。我在 edismax 解析器中找到了 pf 字段。我正在查看它:)
    • 我认为这不受 solr 支持:issues.apache.org/jira/browse/SOLR-6842
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2018-10-12
    • 2021-03-31
    • 2021-01-28
    相关资源
    最近更新 更多