2

我有一些文件在Solr 4.0. 我希望首先显示最相关的记录,然后再显示不太相关的记录。

例如,我有 3 个标题如下的文件 -

  1. 迈向收入分配政策
  2. 收入分配和经济政策
  3. 发展中国家的收入分配政策

现在,当我查询类似的内容时q=title:Income Distribution Policy

我希望第 3 号文件首先出现(因为前 3 个单词完全匹配)然后我希望第 1 号文件出现在第二个(除了“Towards”剩余的匹配项)然后我想要第 2 号文件出现(因为中间有一些词)。

我的schema.xml长相是这样的——

<types>
  <fieldType name="search" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="German2" />
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="German2" />
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>
</types>

<fields>
   <field name="title" type="search" indexed="true" stored="true"/>
</fields>

编辑 1 调试输出

"rawquerystring": "title:Income Distribution Policy",
"querystring": "title:Income Distribution Policy",
"parsedquery": "title:incom title:distribut title:polici",
"parsedquery_toString": "title:incom title:distribut title:polici"

编辑 2 修改了 fieldType

我使用了以下组合,输出仍然相同。

  1. StandardTokenizerFactory - autoGeneratePhraseQueries(不存在) - PorterStemFilterFactory。
  2. StandardTokenizerFactory - autoGeneratePhraseQueries="true" - PorterStemFilterFactory。
  3. StandardTokenizerFactory - autoGeneratePhraseQueries(不存在)。
  4. StandardTokenizerFactory - autoGeneratePhraseQueries="true"。
  5. WhitespaceTokenizerFactory - autoGeneratePhraseQueries(不存在) - PorterStemFilterFactory。
  6. WhitespaceTokenizerFactory - autoGeneratePhraseQueries="true" - PorterStemFilterFactory。
  7. WhitespaceTokenizerFactory - autoGeneratePhraseQueries(不存在)。
  8. WhitespaceTokenizerFactory - autoGeneratePhraseQueries="true"。
4

2 回答 2

2

如果您不按其他任何内容进行排序,则您正在按相似性/相关性进行排序。因此,如果您没有以正确的顺序获得结果,您可能需要考虑如何分配权重以及您正在使用哪些查询解析器。

我假设您正在使用 eDismax 并在标题字段上进行提升。此外,请查看mm(最小匹配)和pf(短语字段)以进行提升。

您可能还想使用在您的 fieldType 上设置的 autoGeneratePhraseQueries 字段进行测试。

当然,查询中的debugQuery=true将帮助您了解正在发生的事情。您可能会发现,在您尝试读取调试输出的前几次,添加debug.explain.structured=true可能很有用。

于 2013-01-28T14:42:21.090 回答
1

我尝试使用""查询字符串并成功了。

喜欢 - q=title:"Income Distribution Policy" OR title:Income Distribution Policy

这给了我作为文档 1、文档 3 和文档 2 的输出。不完美但足够接近。

于 2013-02-11T00:23:57.240 回答