我正在尝试使用 Dismax 查询解析器从具有 solr 4.5 的索引数据中获取自由文本搜索结果,但没有返回结果,也没有像这样的简单查询的错误:
http://localhost:9999/solr/products/select?q=cuir&qf=text_fr&defType=dismax
这些文档存在于索引中:
{ id: 1, label: "Sac à main en cuir" }
{ id: 2, label: "Sac à main en cuir rouge" }
我的架构.xml是:
..
<field name="id" type="int" indexed="true" stored="true" required="true" />
<field name="label" type="string" indexed="true" stored="true" required="true" />
...
<copyField source="label" dest="label_fr"/>
<dynamicField name="*_fr" type="text_fr" indexed="true" stored="false" />
...
<fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_french.txt" enablePositionIncrements="true" />
<filter class="solr.SnowballPorterFilterFactory" language="French"/>
<filter class="solr.CollationKeyFilterFactory" language="fr" strength="primary" />
</analyzer>
</fieldType>
在 solrconfig 中.xml
...
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="defType">dismax</str>
</lst>
...
那么任何想法有什么问题吗?为什么没有结果?
KeywordTokenizer 将整个索引字符串视为单个标记,因此它不会与单个单词查询匹配。
相反,您可以尝试 StandardTokenizerFactory、WhitespaceTokenizerFactory 或 WordDelimiterFilter。
在上面的架构中,您已将字段"label"定义为"字符串",并将其视为单个字符串
您应该将字段类型更改为 :
<field name="label" type="text_general" indexed="true" stored="true" required="true" />
如上所述,默认情况下,text_general字段类型配置了StandardTokenizerFactory。
它会将字段视为文本(或字符串),您将能够对其执行全文搜索。
注意:字段类型字符串在分面搜索特定类别的情况下是很好的在这种情况下,您必须使用字符串以获得更好的结果。 或者你可以做一个复制字段。