Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在solr搜索中找到准确的关键字?_Php_Solr_Php 7.1_Solr Query Syntax_Solr7 - Fatal编程技术网

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

Php 如何在solr搜索中找到准确的关键字?,php,solr,php-7.1,solr-query-syntax,solr7,Php,Solr,Php 7.1,Solr Query Syntax,Solr7,实际上,我在solr搜索中面临一个问题。 有一个author字段,我在其中存储了两个值,如“deep kumar singh”和“deep kumar singh”。 当我搜索作者时:“deep kumar singh”会返回两个结果。 但我只希望有一个结果是准确的 以下是我的字段描述: 我创建了authorFacet字段以获取authorFacet 当我选择authorFacet时,它为两个作者返回计数1 比如: 迪普·库马尔·辛格(1) 迪普·库马尔·辛格(1) 我只希望有一个结果是准确

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

以下是我的字段描述:

我创建了authorFacet字段以获取authorFacet

当我选择authorFacet时,它为两个作者返回计数1 比如:

迪普·库马尔·辛格(1)

迪普·库马尔·辛格(1)

我只希望有一个结果是准确的


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

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

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

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


如果需要精确匹配,则应使用字符串字段类型,而不是文本字段。字符串字段按原样存储,根本不进行任何转换

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


请记住,如果您使用字符串,那么“abc”将不同于“abc”。(注意额外的句点)或“abc”(注意额外的空格)。精确搜索的概念实际上相当复杂,如果您想处理不同的情况(请参见)

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


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

因此,如果您使用以下搜索:

  • “deep”,你会得到“deep kumar singh”和“deep kumar singh”
  • “库马尔·辛格”,你只能得到“深库马尔·辛格”
  • “库马尔·辛格”,你只能得到“深库马尔·辛格”
我相信,这就是你需要的


如果您不想更改text\u general字段类型,您可以使用与text\u general相同的分析器创建另一个字段类型,并将charFilter添加到新的字段类型。

问题在于,您使用两种不同的方式拼写同一作者的姓名。处理这一问题的最正确方法是使您的输入数据行为正确-尝试在Solr中解决这一问题将导致以您未考虑的其他方式出现问题。。