我正在使用 Solr 3.6.0 进行全文搜索。我在 schema.xml 中定义了以下字段:
<field name="productNumber" type="ngramtext" indexed="true" stored="true" required="true" />
<field name="additionalTextData" type="text_en" indexed="true" stored="true"/>
我还定义了以下字段类型:
<fieldType name="ngramtext" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="3" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这将创建一个大小为 2 和 3 的标记并将它们放在索引中。非常适合搜索SKU。现在他们进入同一个索引,我知道这可能会产生性能问题。但是我决定在出现性能问题时处理这个问题。对于我现在拥有的数据集,速度非常快(主观来说:))
我还有以下内容:
<uniqueKey>productNumber</uniqueKey>
在 solrconfig.xml 中,我为每个“df”部分放置了附加文本数据:
="df">="df">additionalTextData<
当我执行以下查询时:
select?indent=on&version=2.2&q=productNumber:12&fq=&start=0&rows=10000&fl=productNumber,additionalTextData&wt=json&explainOther&hl.fl
或者
select?indent=on&version=2.2&q=productNumber:12&fq=additionalTextData:*&start=0&rows=10000&fl=productNumber,additionalTextData&wt=json&explainOther&hl.fl
我得到了 2345 个结果,其中一些是重复的。我通过一些 productNumber 搜索,我可以看到它两次或 3 次。为什么会这样?我该如何克服呢?
EDIT1:
我还发现添加:
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
在所有其他过滤器之后的 ngramtext fieldType 中,并不能解决问题。
根据mbonaci的解决方案1:
而不是:
<field name="productNumber" type="ngramtext" indexed="true" stored="true" required="true" />
地方:
<field name="productNumber" type="string" indexed="true" stored="true" required="true" />
<field name="productNumberCopyField" type="ngramtext" indexed="true" stored="true" required="true" />
在字段标签后添加:
<copyField source="productNumber" dest="productNumberCopyField" />
并且,指定以下查询:
select?indent=on&version=2.2&q= productNumberCopyField :12&fq=additionalTextData:*&start=0&rows=10000&fl=productNumber,additionalTextData&wt=json&explainOther&hl.fl