我正在尝试创建一个索引,该索引允许我基于单个单词和部分短语的“开头”进行查询。
例如,给定文本“ blah blah stuff couple blue drums blah more blah
”(注意这基本上是使用复制字段对记录进行全文搜索),我希望能够匹配以下内容:
- 凑
- 夫妻
- 情侣蓝
- 蓝色的情侣
- 蓝鼓
- 蓝色德鲁
它不应该匹配“一对鼓”的查询。
我尝试使用“text_general”类型,但它不执行部分单词查询,例如“cou”。
<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" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<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>
我还尝试了一个边缘 ngram 过滤器,但它并没有按照我的需要做短语,例如,一个text:'couple drums'
返回结果为 'couple' 或 'drums' 的查询。
<fieldType name="fulltext2" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
是否有标记器和过滤器的组合可以完成我想要做的事情?