使用哪种标记器和过滤器

时间:2015-09-03 15:00:28

标签: solr sunspot

带文字的文档 -

ITA NO. 174 OF 2000 (CIVIL MISC. WRIT PETITION (TAX) NO. 223 OF 2000)

搜索文字

CIVIL MISC. WRIT PETITION (TAX) NO. 223 OF 2000(不会给出上面显示的文件)

使用了Tokenizer -

<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s,\.;]+"/>

同时, 提供正确结果的查询

(CIVIL MISC. WRIT PETITION (TAX) NO. 223 OF 2000)

ITA NO. 174 OF 2000 (CIVIL MISC. WRIT PETITION (TAX) NO. 223 OF 2000)

搜索字段 -

exact

ngram

需要将括号编入索引并能够被搜索作为包含重要信息(这有效) 但只搜索没有括号的文本并没有给出所需的结果

什么行不通 -

替换括号(影响结果相关性,例如139(1)变为1391)

字段类型文字

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s,\.;]+"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s,\.;]+"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

字段类型ngram

<fieldType name="text_ngram" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory" />
    <filter class="solr.StandardFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <!-- <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\d+\(\)]" replacement=""/> -->
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" />
  </analyzer>
</fieldType>

1 个答案:

答案 0 :(得分:0)

您需要更改PatternTokenizerFactory

中的模式

使用此"/[^a-zA-Z ]/"或修改您加注的那个&#34;()&#34;进入你的表达。

它会从索引中删除"(" and ")"并简化您的搜索。

根据您的要求,您可以在文档中使用两个不同的fieldType使用相同的字段两次。

一个字段类型不会有patterfilter工厂,它会使用&#34;()&#34;索引文本。

其他字段类型将具有patternFilter工厂,它将跳过&#34;()&#34;索引..

希望这能解决您的问题。