1

我有一个对象

Title   : foo
Summary : foo bar
Body    : this is a published story about a foo and a bar

这三个都设置为stored=true的字段。

用户在我的系统中搜索这个词

"foo"

我想在所有三个地方突出显示 foo。

用户在标题中搜索单词 foo

"title:foo"

我只想在标题中突出显示 foo 。

当我添加 hl.requireFieldMatch=truehl.usePhraseHighlighter=true作为对 SOLR 的查询的一部分时,在进行通用非字段搜索时,我无法在所有三个地方突出显示。有没有办法让这两种情况都起作用?

我关闭了这两个项目,但是我在查询的某些字段部分中添加了用户看不到的部分,例如仅显示已发布的项目。问题是

(foo AND status:published)

当用户仅搜索单词“foo”时,导致正文中发布的单词突出显示。

4

1 回答 1

1

事实证明,与 solr / lucene 相比,act_as_solr 可能更像是一个怪癖。

我利用了 solr http://wiki.apache.org/solr/CommonQueryParameters#fq中的 fq 选项

查询不再像

(foo AND status:published)

看起来更像

q=foo&fq=status:published

当它遇到 solr

fq 不会影响突出显示,它似乎是一种更好的方法,因为您可以获得一些 solr 缓存优势。

仍然有一个 bug / 功能没有用acts_as_solr 实现,它也需要利用这一点。

例如,如果我的模型名为 article,并且用户搜索单词 article,AAS 正在后台构建一个查询,看起来像

(article AND type_t:article)

这会导致同样的问题,当您不希望它在整个地方突出显示时,以及当用户搜索术语“文章”时,他们会返回系统中的每个对象。

快速浏览了acts_as_solr 的GitHub 分支,并没有看到任何人已经实现了这个。在 parser_methods.rb 中有很好的#TODO

于 2010-04-01T19:20:40.193 回答