如何在 solr 搜索中找到确切的关键字?

How to find exact keywords in solr search?

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

这是我的字段描述:

<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 时 returns 两个作者都算 1 喜欢:

深库马尔-辛格(1)

深库马尔·辛格(1)

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

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

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

另外,从solr管理页面也可以分析出来。 转到 solr 管理页面。 Select core/collection。 点击分析。您可以 select 该字段并检查索引时间标记和查询时间是否符合您的预期。

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

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

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

请记住,如果您使用字符串,则 "abc" 将不同于 "abc."(注意额外的句点)或 "abc "(注意额外的 space ).如果您想以不同的方式处理这些情况,则精确搜索的概念实际上非常复杂(请参阅

您可以通过在索引和查询分析器中添加一个 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 添加到新字段类型。