Solrj查询 - 首先获取最相关的记录

时间:2013-01-28 03:00:01

标签: solr schema solrj

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

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

  1. 实现收入分配政策
  2. 收入分配和经济政策
  3. 发展中国家的收入分配政策
  4. 现在我查询类似q=title:Income Distribution Policy

    的内容

    我想首先显示3号文件(因为前3个单词是完全匹配)然后我希望文档编号1显示第二个(除了“朝向”剩下的匹配)然后我想要文件编号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”。

2 个答案:

答案 0 :(得分:1)

如果您没有按其他方式排序,则按相似性/相关性排序。因此,如果您没有按照正确的顺序获得结果,您可能需要了解如何分配权重以及您正在使用的查询解析器。

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

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

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

答案 1 :(得分:1)

我尝试使用""围绕查询字符串进行操作。

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

这给了我输出文件1然后文件3然后文件2.不完美但足够接近。