在SOLR中使用带短语域的程序



我使用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"

查询从description中得到提升,但从keyword1和keyword2中没有。我知道这是因为pf搜索关键字1为"foo bar"(与短语slop),而不是"foo"bar"。我想基于单个单词进行提升。这是可能的没有插件吗?

我想到的事情:

我知道像pf2和pf3的选项,但基本上我要找的是一个pf1。我希望能够在单个单词上进行提升。

我不把keyword1, keyword2添加到qf的原因是我不希望它们匹配。作为关键字,2有一些术语可能与文档没有任何关系。

我可以在查询时中断查询并使用bq

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

但是我想给不同的字段分配不同的权重,这在构建查询时很麻烦。

总而言之,我想要一个参数la pf1

我查看了SOLR源代码,在edismax查询解析器中添加pf1参数是相当直接的—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"

我得到了第一个查询的所有提升但是我限制了name

相关内容

  • 没有找到相关文章

最新更新