Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Search 按字符串列表拆分solr时的筛选器_Search_Solr_Wcs_Hcl - Fatal编程技术网

Search 按字符串列表拆分solr时的筛选器

Search 按字符串列表拆分solr时的筛选器,search,solr,wcs,hcl,Search,Solr,Wcs,Hcl,我的Solr实现中有这个字段类型 <fieldType name="suggestion_text" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory&qu

我的Solr实现中有这个字段类型

<fieldType name="suggestion_text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterFilterFactory"
          generateWordParts="1"
          generateNumberParts="1"
          splitOnNumerics="1"
          preserveOriginal="1"
  />
  <filter class="solr.EdgeNGramFilterFactory" maxGramSize="100"/>
  <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

这几乎适用于我所有的车型。例如,对于型号AB1234,我可以搜索1234,它会找到它。但我想包括一个特殊的案例,我正试图找到一个比当前更好的解决方案:

假设AB是制造商,1234是实际的零件号,但在我的数据库中它们保存为AB1234。我有一个A0制造商和A01234零件号,当前的实现如果我搜索1234我不会找到它

我找到了一个将EdgeNGramFilterFactory转换为NGramFilterFactory的解决方案,但这不是我想要的解决方案。我希望Solr能够搜索不包括前两个字符的字符,如果它们是字母+数字或在极端情况下,但我需要它搜索A0和不带A0

我不知道我是否清楚。无论如何,我尝试使用正则表达式,创建一个新字段,并在其上使用此过滤器:

<filter class="solr.PatternReplaceFilterFactory" pattern="(A0)" replacement="" replace="all" />


但这并没有带来预期的结果


你能帮我吗?谢谢

请尝试以下字段类型解决您的问题

<fieldType name="text_en_splitting_test" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" splitOnNumerics="1" preserveOriginal="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

<fieldType name="text_en_splitting_test" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" splitOnNumerics="1" preserveOriginal="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>