我使用solr搜索文档并在一个字段上进行匹配,然后根据其他字段中出现的关键字进行boost。
例如。
<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中得到提升,但不会从keywords1和keywords2中获得提升。我知道这是因为pf在keywords1中搜索"foo bar“(带有短语slop),而不是"foo”"bar“。我想基于单个单词来增强。这在没有插件的情况下是可能的吗?
我想过的事情:
我知道像pf2和pf3这样的选项,但基本上我要找的是pf1。我希望能够在单个单词上提升。
我之所以不只是将keywords1,keywords2添加到qf中,是因为我不想让它们匹配。关键字二有一些术语可能与文档没有任何关系。
我可以在查询时分解查询并使用bq
bq = keywords1:foo OR keywords1:bar etc...但是我想为不同的字段分配不同的权重,这对于构建查询来说是很麻烦的。
总而言之,我想要一个像pf1一样的参数。
发布于 2014-08-27 01:54:28
我查看了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"因此,我得到了第一个查询的所有提升,但我限制了名称。
https://stackoverflow.com/questions/25252783
复制相似问题