2

假设我有 5 个文档,其字段文本如下:

  1. 红房子很漂亮
  2. 房子很小
  3. 红鱼
  4. 红黄相间的房子很大

如果我搜索“红房子”,我应该使用什么样的查询来检索文档,使得排名如下:

  1. 房子又漂亮又大【搭配:红房子】
  2. 红黄房子大【搭配:红xx房子】
  3. 房子很小[匹配:房子]
  4. 红鱼【搭配:红色】

我需要的是对与我搜索过的短语匹配的文档给予较高的排名,而对仅搜索了部分短语的文档给予较低的分数。请注意,字符串查询也可能包含超过 2 个术语。

它就像一个 PhraseQuery,其中每个术语可以出现或不出现,并且术语越接近得分越高。

我尝试使用 TermQuery 组合 PhraseQuery,但结果不是我需要的。

我能怎么做?

谢谢

4

2 回答 2

1

尝试创建一个由 TermQuery 对象组成的 BooleanQuery,并结合 OR (BooleanClause.Occur.SHOULD)。这将匹配只出现一个词的文档,但应该给同时出现的文档更高的分数。

Query term1 = new TermQuery(new Term("text", "red"));
Query term2 = new TermQuery(new Term("text", "house"));
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(term1, BooleanClause.Occur.SHOULD);
booleanQuery.add(term2, BooleanClause.Occur.SHOULD);
于 2013-10-07T03:26:42.620 回答
0

我认为带有正向 setSlopePhraseQuery应该与每个术语的 TermQuery 结合使用,应该可以让您到达那里。也许对 PhraseQuery 有所提升

我尝试使用 TermQuery 组合 PhraseQuery,但结果不是我需要的。

你从这个组合中得到了什么,它怎么不是你需要的?

于 2013-12-25T20:33:53.500 回答