我做了一个工作来获取包含“好”或“微波”或“好微波”的所有文件,如果我将“好微波”作为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 +微波%0ASearchableField1%3AGood +微波
但是包含整个短语“Good Microwave”的文件得分非常低。 任何人都可以指导我在那些包含整个短语的文件上得到更高的分数,如果我的方法是正确的吗?
或者任何人都可以指导我实现这个目标吗?
答案 0 :(得分:0)
你好frnd你可以使用简单查询使用'suggester component'请求处理程序和字段类型shingleString来搜索phrase.just你必须专注于你的查询语法......
http://localhost:8983/solr/suggest?wt=xml&indent=true&spellcheck=true&spellcheck.q=usrsearchphrase
<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>
答案 1 :(得分:0)
如果您有'text_general'类型的字段, 寻找:q =良好的微波炉 将找到任何带有“好”或“微波”的文件。 正在寻找:q =“好微波炉” 将找到包含彼此相邻的两个术语的任何文档。 q =“良好的微波炉”^ 5好的微波炉将找到包含任一术语的任何文件,但会增加包含彼此相邻术语的文件。