我想在我的网站上使用“自动填充”搜索引擎。
所以,我有一个名为shortdesc的字段,其定义如下:
<field name="shortdesc" type="text_de" indexed="true" stored="false" />
字段类型:
<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="20"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" enablePositionIncrements="true"/>
<filter class="solr.GermanNormalizationFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" enablePositionIncrements="true"/>
<filter class="solr.GermanNormalizationFilterFactory"/>
</analyzer>
</fieldType>
所以,现在为了进行自动完成,我需要一个额外的字段(field_autocomplete),我将复制字段shortdesc。 该字段定义为(我不需要从该字段中检索数据):
<field name="field_autocomplete" type="text_autocomplete" indexed="true" stored="false" multiValued="true" />
类型定义:
<fieldType name="text_autocomplete" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" enablePositionIncrements="true" />
<filter class="solr.GermanNormalizationFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="25"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" enablePositionIncrements="true" />
<filter class="solr.GermanNormalizationFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
然后,复制字段:
<copyField source="shortdesc" dest="field_autocomplete"/>
好的,那么,我的第一个问题:
另一个问题:
有人能给我一些关于这两件事情变得疯狂的线索吗?
答案 0 :(得分:3)
Copyfield的文档: -
原始文本从“source”字段发送到“dest”字段, 在为原始或目的地配置任何分析器之前 字段被调用。
format="snowball"
,这似乎在分析中有所不同
此外,通常建议在索引和查询时使用相同的标记器和过滤器,以便索引的术语与搜索的术语匹配。所以可能只想再次检查配置。