【问题标题】:How to find exact keywords in solr search?如何在 solr 搜索中找到确切的关键字?
【发布时间】:2020-02-27 11:10:40
【问题描述】:

实际上,我在 solr 搜索中遇到了一个问题。 有一个作者字段,我在其中存储了两个值,例如“deep kumar-singh”和“deep kumar singh”。 当我搜索作者时:“deep kumar-singh”它返回两个结果。 但我只希望一个结果是准确的。

这是我的字段描述:

<field name="author" type="text_general" indexed="true" stored="true" multiValued="true"/>

我创建了 authorFacet 字段来获取作者方面。

<field name="authorFacet" type="string_ci" indexed="true" stored="false" multiValued="true"/>

当我选择 authorFacet 时,它为两位作者返回计数 1 喜欢:

深库马尔-辛格(1)

深库马尔·辛格(1)

我只想要一个准确的结果。

我怎样才能得到这个?,任何建议都会非常有帮助。

【问题讨论】:

  • 问题是同一个作者的名字有两种不同的拼法。处理此问题的最正确方法是使您的输入数据行为正确 - 尝试在 Solr 中解决此问题将导致您未考虑的其他方式保证问题..

标签: php solr php-7.1 solr-query-syntax solr7


【解决方案1】:

authorfieldType 更改为text_general 的字符串并重新索引数据。 你会得到想要的结果。作为以字符串为类型的字段,它不会创建单词的任何标记,有助于实现精确匹配。

此外,同样可以从 solr 管理页面进行分析。 转到 solr 管理页面。选择核心/集合。 点击分析。您可以选择字段并检查索引时间令牌和查询时间是否符合您的期望。

有了这个,作者就不需要 2 个不同的字段了。 您可以使用一个具有字符串作为字段类型的字段,可用于分面和搜索。

【讨论】:

    【解决方案2】:

    如果您想要完全匹配,那么您应该使用字符串字段类型而不是文本字段。字符串字段按原样存储,根本不对其进行任何转换。

    <field name="author" type="string" indexed="true" stored="true" multiValued="true"/>
    

    请记住,如果您使用字符串,则“abc”将不同于“abc”。 (注意额外的句号)或来自“abc”(注意额外的空格)。如果您想以不同的方式处理这些情况,精确搜索的概念实际上非常复杂(请参阅https://stackoverflow.com/a/29105025/446681

    【讨论】:

      【解决方案3】:

      您可以通过在索引和查询分析器中添加 charFilter 来修改字段类型,如下所示:

      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[-]" replacement=""/>
      

      请注意,charFilter 必须放在分词器之前。基本上,您是在标记化之前删除连字符。

      所以,如果你搜索:

      • “deep”,你会得到“deep kumar-singh”和“deep kumar singh”。
      • “kumar-singh”,您只会得到“deep kumar-singh”。
      • “kumar singh”,你只会得到“deep kumar singh”。

      我相信,这就是你所需要的。

      如果您不想更改 text_general 字段类型,您可以创建另一个具有与 text_general 相同的分析器的字段类型,并将 charFilter 添加到新的字段类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 2023-03-31
        • 2013-03-19
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 2015-12-25
        相关资源
        最近更新 更多