Solr外卡搜索与中间的空间

时间:2016-02-08 09:35:23

标签: solr

民间,

我们想在中间用空格进行solr外卡搜索。

例如,如果我们搜索“请\帮助*”,那么它应该检索所有具有“请帮助”的文档,然后是具有“请”和“帮助”字样的文档。

如果我们搜索“请\帮助*”,那么只有“请帮助”的归还文件,并且不返回“请”和“帮助”等个别标记的搜索。

下面给出了我们用于索引和搜索的字段定义

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
  <analyzer type="index">         
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.WordDelimiterFilterFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100"/>
    <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/>
 </analyzer>  
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/>
  </analyzer>  
</fieldType>

1 个答案:

答案 0 :(得分:1)

当您使用通配符搜索时,不会调用查询的分析阶段。这意味着&#34;请帮助*&#34;不会通过Shingle过滤器等,因此不会给任何点击。

如您对问题的评论中所述 - 在索引阶段使用EdgeNgramFilter,然后只需提交您的查询为&#34;请帮助&#34;。然后,这将检索字段以字段开头的所有文档&#34;请帮助&#34;,因为它将创建相同标记的多个版本(例如&#34; P&#34;,&#34; Pl&#34 ;,&#34; Ple&#34;,&#34;辩护&#34;,&#34;请求&#34;,&#34;请&#34;,&#34;请&#34;,&# 34;请H&#34;等。)

您必须调整过滤器的顺序以符合您的需要。

您还可以使用KeywordTokenizer将完整输入索引为单个标记(如果需要,使用LowercaseFilter),然后使用它来匹配单个标记与通配符搜索(因为没有其他分析将需要发生。)