Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
C# Solr搜索不包括短语的精确单词_C#_Solr_Full Text Search_Config - Fatal编程技术网

C# Solr搜索不包括短语的精确单词

C# Solr搜索不包括短语的精确单词,c#,solr,full-text-search,config,C#,Solr,Full Text Search,Config,我想知道在solr配置中是否有一种方法可以使精确匹配丢弃短语中的匹配 例如: 搜索字符串:你好 结果应该是:你好 并且不应该包含:你好,世界,你好,你好 它应该搜索与该词完全匹配的词,但在短语中忽略此项 谢谢。我最初考虑的是近距离,但你的情况不需要 定义一个字符串类型的字段,比如amn_name_ss-这是一个存储的字符串 使用搜索时,字符串将查找精确搜索 例如:amn\u name\u ss:Hello将只返回具有值Hello的文档 将文档创建为 {id:amn1,amn\u name\u s

我想知道在solr配置中是否有一种方法可以使精确匹配丢弃短语中的匹配

例如: 搜索字符串:你好 结果应该是:你好 并且不应该包含:你好,世界,你好,你好

它应该搜索与该词完全匹配的词,但在短语中忽略此项


谢谢。

我最初考虑的是近距离,但你的情况不需要

定义一个字符串类型的字段,比如amn_name_ss-这是一个存储的字符串

使用搜索时,字符串将查找精确搜索

例如:amn\u name\u ss:Hello将只返回具有值Hello的文档

将文档创建为 {id:amn1,amn\u name\u ss:Hello,type:amn} {id:amn2,amn\u name\u ss:Hello World,type:amn}

查询: %3A&fq=type%3aam&wt=json&indent=true

将给出如下结果

查询:

将给出如下结果


我最初考虑的是近距离,但你的情况不需要

定义一个字符串类型的字段,比如amn_name_ss-这是一个存储的字符串

使用搜索时,字符串将查找精确搜索

例如:amn\u name\u ss:Hello将只返回具有值Hello的文档

将文档创建为 {id:amn1,amn\u name\u ss:Hello,type:amn} {id:amn2,amn\u name\u ss:Hello World,type:amn}

查询: %3A&fq=type%3aam&wt=json&indent=true

将给出如下结果

查询:

将给出如下结果


将字段类型更改为字符串

确保您有以下条目

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
不会分析StrField类型,而是索引/存储

然后更改字段键的字段类型

<field name="fieldName" type="string" indexed="true" stored="true"/>
这将是准确的搜索,因为不会有任何代币

或者,该选项可以使用以下字段类型

<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> 
<analyzer> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
</analyzer> 
</fieldType>
这里,KeywordTokenizer不进行实际的标记化,因此整个输入字符串作为单个标记保留


小写的TokenFilter实现了您所期望的功能,当您希望排序/搜索不区分大小写时,可以将字段类型更改为string

确保您有以下条目

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
不会分析StrField类型,而是索引/存储

然后更改字段键的字段类型

<field name="fieldName" type="string" indexed="true" stored="true"/>
这将是准确的搜索,因为不会有任何代币

或者,该选项可以使用以下字段类型

<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> 
<analyzer> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
</analyzer> 
</fieldType>
这里,KeywordTokenizer不进行实际的标记化,因此整个输入字符串作为单个标记保留


小写的TokenFilter实现了您所期望的功能,这可以在您希望排序/搜索不区分大小写时实现

对不起,我对solr不太熟悉。您能解释一下如何进行邻近设置吗?所以将搜索字段设置为字符串类型可以解决这个问题吗?不需要标记器/分析器/过滤器更改?是的,将字段类型设置为字符串将解决精确的比较问题。我们使用带有文本字段的标记器,比如你想存储Google和Samsung,搜索Samsung和Google时应该检索结果。当您解码搜索时,不需要,您将添加stopwords筛选器对不起,我对solr不太熟悉。您能解释一下如何进行邻近设置吗?所以将搜索字段设置为字符串类型可以解决这个问题吗?不需要标记器/分析器/过滤器更改?是的,将字段类型设置为字符串将解决精确的比较问题。我们使用带有文本字段的标记器,比如你想存储Google和Samsung,搜索Samsung和Google时应该检索结果。当您使用和解码搜索时,您将添加stopwords过滤器。您是否可以共享schema.xml。。。?你重新索引了吗?。我刚刚将类型“text”更改为“string”,然后停止/启动tomcat服务,但您需要重新索引数据,或者您可以在solr web界面中分析数据…是的,这就足够了…在执行相同操作后,仍然无法实现它?在这种情况下,您可以使用fieldType共享schema.xml吗。。。?你重新索引了吗?。我刚刚将类型“text”更改为“string”,然后停止/启动tomcat服务,但您需要重新索引数据,或者您可以在solr web界面中分析数据…是的,这就足够了…在执行相同操作后,仍然无法实现它?在这种情况下,您使用fieldType