我正在使用NGramFilterFactory。我的架构如下所示
<fieldType name="c_text" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="255"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="parentId" type="string" indexed="true" stored="true"/>
<field name="data_s" type="c_text" indexed="true" stored="true"/>
<field name="email" type="c_text" indexed="true" stored="true"/>
<field name="receivedDate" type="tdate" indexed="true" stored="true"/>
我想在data_s字段上进行exatc短语搜索,例如“Hello World”,但无法进行。如果我给了data_s:hello world,它会返回所有有hello或者world或者两者的记录。如果我给
data_s:“你好世界”,它什么也不返回。
如何对此进行精确的短语搜索。 我还需要搜索像“ello”这样的部分文本,这就是我使用NGramFilterFactory的原因。
所以我的要求是搜索确切的短语和部分文本。
答案 0 :(得分:1)
我的解决方案: -
我正在使用复制字段。
<field name="content" type="text_general" indexed="true" stored="false"
multiValued="true"/>
<copyField source="data_s" dest="content"/>
每当我需要进行精确搜索时,我都会搜索“内容”字段。
我使用的是solr3.5,“text_general”定义为此solr版本
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>