Solr “字符串”类型的字段。即使查询字符串存储在这样的字段中,查询也不会返回任何结果

Solr “字符串”类型的字段。即使查询字符串存储在这样的字段中,查询也不会返回任何结果,solr,Solr,我正在调试一个涉及Solr search的应用程序中的搜索问题。 这里有一个名为author的字段,在schema.xml中定义。 我们看到文档中有一个值,所以这个字段看起来是正确的索引。 但是,当我们在这样一个领域中搜索某些内容时,并没有得到任何结果 原始字段定义如下: <field name="author" type="string" indexed="true" stored="true" docValues="true" /> 如果存在像Mad Max这样的索引值,则Ma

我正在调试一个涉及Solr search的应用程序中的搜索问题。 这里有一个名为author的字段,在schema.xml中定义。 我们看到文档中有一个值,所以这个字段看起来是正确的索引。 但是,当我们在这样一个领域中搜索某些内容时,并没有得到任何结果

原始字段定义如下:

<field name="author" type="string" indexed="true" stored="true" docValues="true" />
如果存在像Mad Max这样的索引值,则Mad、Max和Mad Max都不会有结果。 但是当有一个像MadMax这样的值时,如果我们精确地搜索MadMax,就会有一个结果。madmax和其他任何东西都不起作用

现在,我在Solr 6的文档中阅读了以下内置类型StrField的内容:它是string的正确类型吗

字符串用于小字段,并且没有标记或标记 以任何方式分析


这是否意味着type=string仅适用于单字字符串see not tokenized,该字符串必须完全匹配see not分析


或者是否有其他设置可以控制字符串类型字段的行为,从而实现多字内容的部分匹配和不区分大小写的匹配?

这是否意味着type=string仅适用于单字字符串see not tokenized,必须以任何方式完全匹配see not分析? 对

或者是否有其他设置可以控制字符串类型字段的行为,从而实现多字内容的部分匹配和不区分大小写的匹配? 没有

如果字段类型为字符串,则不会分析该字段。即使字符串由多个单词组成,也不会对字符串进行任何标记化

如果您想要实现对精确单词的搜索,那么您应该选择字符串类型

如果您希望实现精确搜索以及区分大小写,则使用关键字TokenizerFactory和小写过滤器factory创建您自己的字段

因此关键字TokenizerFactory将有一个类似于web world的令牌作为索引中的单个令牌

WhitespaceTokenizerFactory将创建web、world等标记

你可以看到区别,它不匹配。您正在搜索网络世界,网络世界对网络世界

一旦创建了自己的字段类型,就可以在solr admin页面中验证相同的字段类型。所有令牌都创建了什么,以及它是否与任何令牌匹配


您甚至可以通过使用不同的标记器和过滤器来控制对索引类型和查询类型的分析。

Thx!使用WhitespaceTokenizerFactory和LowerCaseFilterFactory。
<fieldType name="text_phrase" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
<fieldType name="text_custom" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" splitOnCaseChange="1"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>