2

实际上,我在 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)

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

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

4

3 回答 3

2

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

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

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

solr 完全匹配

于 2020-02-27T11:23:41.673 回答
1

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

于 2020-03-02T06:28:36.840 回答
1

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

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

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

于 2020-02-27T14:54:41.983 回答