搜索给定数字中的最后四个数字

时间:2017-09-08 07:22:56

标签: search solr4

我正在尝试搜索并匹配最后四个数字与一个10位数字。

实施例

  
      
  • 7154226465
  •   
  • 7152436464
  •   
  • 7152348464
  •   

如果我搜索646,它应匹配前两个数字。确切地说,我正在寻找与索引号码的最后4位数匹配的后缀搜索。下面是架构

<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100">
         <analyzer type="index">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.TrimFilterFactory" />
            <filter catenateAll="1" catenateNumbers="0" catenateWords="0" class="solr.WordDelimiterFilterFactory" generateNumberParts="0" generateWordParts="0" splitOnCaseChange="0"/>
            <filter class="solr.ReverseStringFilterFactory"/>
            <!--<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="17"/>-->
             <filter class="solr.EdgeNGramFilterFactory" minGramSize="7" maxGramSize="10" side="front"/>
            <filter class="solr.ReverseStringFilterFactory"/>

         </analyzer>
         <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory" />
            <filter catenateAll="1" catenateNumbers="0" catenateWords="0" class="solr.WordDelimiterFilterFactory" generateNumberParts="0" generateWordParts="0" splitOnCaseChange="0" />
            <filter class="solr.LowerCaseFilterFactory"/>            
            <filter class="solr.TrimFilterFactory" />    
         </analyzer>
        </fieldType>
带有side="back"的EdgNGram在lucene 4.4中不起作用。我正在使用solr v4.9.1

1 个答案:

答案 0 :(得分:0)

如果您只想搜索最后4位数字,那么前往EdgeNGramFilterFactory即可。试试这个:

<filter class="solr.ReverseStringFilterFactory"/>

<filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="4" />

<filter class="solr.ReverseStringFilterFactory"/>

小记。除了使用ngrams之外,有效支持前导通配符的传统方法是反转字符串并执行前缀查询。