我做了一项工作以获取所有包含“Good”或“Microwave”或“Good Microwave”的文档,如果我将“Good Microwave”作为 q 参数传递,请指导我无论我是否朝着正确的方向前进。
我在我的模式中定义了两个字段类型(text_general 和 shingleString),如下所示
<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.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="shingleString" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PositionFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramIfNoNgram="true" maxShingleSize="99"/>
<filter class="solr.PositionFilterFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
然后在编制索引时,我将所有这些字段添加到两个不同的复制字段,如下所示。
<field name="SearchableField" type="shingleString" indexed="true" stored="false" multiValued="true"/>
<copyField source="ProductName" dest="SearchableField"/>
<copyField source="ProductDesription" dest="SearchableField"/>
<copyField source="Product Feedback" dest="SearchableField"/>
<field name="SearchableField1" type="text_general" indexed="true" stored="false" multiValued="true"/>
<copyField source="ProductName" dest="SearchableField1"/>
<copyField source="ProductDesription" dest="SearchableField1"/>
<copyField source="Product Feedback" dest="SearchableField1"/>
现在,如果我同时查询 SearchableField 和 SearchableField1 这两个字段,我将获得所有包含“Good”或“Microwave”或“Good Microwave”的文档。下面是我用来获取所有文档的查询。q=SearchableField%3AGood+Microwave%0ASearchableField1%3AGood+Microwave
但是包含整个短语“Good Microwave”的文档得分很低。如果我的方法完全正确,任何人都可以指导我在那些包含整个短语的文件上获得更高的分数吗?
或者有人可以指导我实现这一目标吗?