0

我正在尝试使用Dismax Query Parser从 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" }

我的 schema.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>
 ...

那么有什么想法有什么问题吗?为什么没有结果?

4

2 回答 2

2

KeywordTokenizer 将您的整个索引字符串视为单个标记,因此它不会匹配单个单词查询。

相反,您可以尝试 StandardTokenizerFactory、WhitespaceTokenizerFactory 或 WordDelimiterFilter。

于 2013-11-03T00:27:42.670 回答
0

在上述模式中,您将字段“label”定义为“string”,并将其视为单个字符串

您应该将 fieldType 更改为:

<field name="label" type="text_general" indexed="true" stored="true" required="true" />

如上所述,text_general fieldType 默认配置了 StandardTokenizerFactory。

它将字段视为文本(或字符串),您将能够对其执行全文搜索。

注意:FieldType String 在分面搜索特定类别的情况下很好,在这种情况下,您必须使用 String 以获得更好的结果。或者你可以做一个 CopyField。

于 2016-05-11T04:55:32.917 回答