首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SOLR中对短语字段使用unigram

在SOLR中对短语字段使用unigram
EN

Stack Overflow用户
提问于 2014-08-12 05:31:59
回答 1查看 195关注 0票数 0

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

例如。

代码语言:javascript
复制
<str name="qf">
  name^1
</str>
<str name="pf">
   keywords1^2
   keywords2^1.2
   description^0.2
 </str>

所以如果我搜索

代码语言:javascript
复制
q=foo+bar

我得到了一个结果

代码语言:javascript
复制
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

代码语言:javascript
复制
bq = keywords1:foo OR keywords1:bar etc...

但是我想为不同的字段分配不同的权重,这对于构建查询来说是很麻烦的。

总而言之,我想要一个像pf1一样的参数。

EN

回答 1

Stack Overflow用户

发布于 2014-08-27 01:54:28

我查看了SOLR的源代码,可以非常直接地将pf1参数添加到edismax查询解析器中- pf2和pf3使用可以为pf1调用的更通用的函数。然而,我真的不想从源代码重新编译solr。我已经解决了使用嵌套查询的问题。

我现在有了

代码语言:javascript
复制
<str name="qf">
  name^1
  keywords1^2
  keywords2^1.2
  description^0.2
</str>

我的查询现在看起来像这样

代码语言:javascript
复制
q=(foo bar) AND _query_:"{!edismax qf='name'}foo bar"

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25252783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档