【问题标题】:Solr wildcard search not working on general text fieldSolr 通配符搜索不适用于一般文本字段
【发布时间】:2021-09-01 23:11:24
【问题描述】:

我是 Solr 世界的新手,我有 Solr 7.7.2

我正在尝试进行通配符搜索,但没有返回任何结果。下面给出的是我为字段类型设置的索引、查询分析器。

示例文本: Solr 的标准查询解析器支持单个字词内的单个和多个字符通配符搜索。

在上面的示例文本中,我想搜索 standard* 以匹配单词 standard 感谢您对此的帮助。


<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
    <analyzer type="index">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>      
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
      <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" splitOnCaseChange="0" splitOnNumerics="0"/>
      <filter class="solr.FlattenGraphFilterFactory" />
      <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
      <filter class="solr.FlattenGraphFilterFactory" />
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>      
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
      <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" splitOnCaseChange="0" splitOnNumerics="0"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
    </analyzer>
  </fieldType>

【问题讨论】:

  • 通配符将作用于字符串字段而不是文本字段
  • 您好 Abhijith,感谢您的回复。但是简单的字符串字段类型也不起作用。字段值(索引)上的 standard 和字段值(查询)上的 standard* 不匹配。
  • 修改后需要重启服务器...
  • 我没有更改字段类型。只需使用管理门户中的分析屏幕并尝试通过将字段选择为 string 并在上方运行来进行检查
  • 视情况而定。您要索引哪些文本以及如何匹配它?如果standard 是文本中的一个单词(即this is standard,只有一个WhitespaceTokenizer 和一个小写过滤器应该允许您执行field:standar* 以匹配单个standard 标记。对于更高级的处理,将需要一个NgramFilter

标签: solr


【解决方案1】:

经过几个小时的分析,添加了 EdgeNgramfilter 并且它起作用了。 我想如果在大文本字段上使用会出现性能问题。我可能需要测试一下。

&lt;filter class="solr.EdgeNGramFilterFactory" minGramSize="5" maxGramSize="10"/&gt;

<analyzer type="index">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>      
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
      <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" splitOnCaseChange="0" splitOnNumerics="0"/>
      <filter class="solr.FlattenGraphFilterFactory" />
      <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
      <filter class="solr.FlattenGraphFilterFactory" />
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="5" maxGramSize="10"/>
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多