【问题标题】:Using unigrams with phrasefields in SOLR在 SOLR 中使用带有短语字段的 unigram
【发布时间】:2014-10-04 20:13:21
【问题描述】:

我正在使用 solr 搜索文档并在一个字段上进行匹配,然后希望根据出现在其他字段中的关键字进行提升。

例如

<str name="qf">
  name^1
</str>
<str name="pf">
   keywords1^2
   keywords2^1.2
   description^0.2
 </str>

所以如果我搜索

q=foo+bar

我有结果

name = "This is a foo bar"
keywords1 = "bar"
keywords2 = "foo cats dogs chicken"
description = "There is a foo in here with a bar"

查询从描述中得到提升,而不是从关键字 1 和关键字 2 中得到提升。我知道这是因为 pf 在关键字 1 中搜索“foo bar”(带有短语 slop),而不是“foo”“bar”。我想根据单个单词进行提升。没有插件这可能吗?

我想到的事情:

我知道 pf2 和 pf3 之类的选项,但基本上我正在寻找的是 pf1。我希望能够提升单个单词。

我不只是将keywords1,keywords2添加到qf的原因是我不希望它们被匹配。由于关键字二有一些可能与文档无关的术语。

我可以在查询时分解查询并使用 bq

bq = keywords1:foo OR keywords1:bar etc...

但我想为不同的字段分配不同的权重,构建查询很麻烦。

总的来说,我想要一个参数 a la pf1。

【问题讨论】:

    标签: java search solr lucene edismax


    【解决方案1】:

    我查看了 SOLR 源代码,将 pf1 参数添加到 edismax 查询解析器是相当简单的 - pf2 和 pf3 使用可以为 pf1 调用的更通用的函数。但是我真的不想从源代码重新编译 solr。我已经解决了使用嵌套查询的问题。

    我现在有

    <str name="qf">
      name^1
      keywords1^2
      keywords2^1.2
      description^0.2
    </str>
    

    我的查询现在看起来像

    q=(foo bar) AND _query_:"{!edismax qf='name'}foo bar"
    

    所以我得到了第一个查询的所有提升,但我限制了名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2018-01-05
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多