我是使用Solr的新手,并定义了以下架构:
<schema name="example" version="1.5">
<fields>
<field name="nodeId" type="string" indexed="true" stored="true" />
<field name="_root_" type="string" indexed="true" stored="false" />
<field name="datetime" type="string" indexed="true" stored="true"
multiValued="true" />
<field name="epochSecs" type="string" indexed="true" stored="true"
multiValued="true" />
<field name="subject" type="text_general" indexed="true"
stored="true" />
<field name="body" type="text_general" indexed="true"
stored="true" />
<field name="emailId" type="string" indexed="true"
stored="true" />
<field name="compliantFlag" type="boolean" indexed="true"
stored="true" />
<field name="_version_" type="long" indexed="true" stored="true" />
<field name="text" type="text_general" indexed="true" stored="false"
multiValued="true" />
<field name="ngrams" type="myNGram" indexed="true" stored="false" required="false" />
</fields>
<uniqueKey>nodeId</uniqueKey>
<copyField source="datetime" dest="text" />
<copyField source="epochSecs" dest="text" />
<copyField source="subject" dest="text" />
<copyField source="body" dest="text" />
<copyField source="emailId" dest="text" />
<copyField source="compliantFlag" dest="text" />
<copyField source="text" dest="ngrams"/>
<types>
<fieldType name="string" class="solr.StrField"
sortMissingLast="true" omitNorms="true"/>
<fieldType name="long" class="solr.TrieLongField"
precisionStep="0" positionIncrementGap="0" />
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
<fieldType name="text_general" class="solr.TextField"
positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="myNGram" stored="false" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="5"/>
</analyzer>
</fieldType>
</types>
停用词不会从&#34; body&#34;中移除。索引时的字段。
另外,如何使用solr的分析器从下面的字段中删除\ n等特殊字符:
\n \n\n\nThese are the numbers Smurfit has. \n\nP
感谢任何帮助。感谢。
答案 0 :(得分:1)
StandardTokenizer
应该在换行符,空格等周围创建令牌,而禁用词过滤器一目了然,就像它应该正常工作一样。您可能应该在LowercaseFilter
之上加StopwordFilter
,以防止这些匹配区分大小写。
我想知道一个相关的问题是否可能是:你是什么意思&#34;删除&#34;?分析仅影响字段的索引表示。它不会影响您以任何方式从索引中检索的存储的版本。它旨在促进搜索,而不是转换文本的存储版本。如果你删除&#34;&#34;通过过滤器,你不应再对单词&#34;&#34;在搜索时,您仍会在从索引中检索文档时看到。