假设我有5个文件,其字段文本如下:
如果我搜索“红房子”,我应该使用什么样的查询来检索文档,以便排名如下:
我需要的是对与我搜索过的短语匹配的文档给出较高的排名,对只有一部分搜索短语的文档给出较低的分数。 请注意,字符串查询还可以包含两个以上的术语。
它就像一个PhraseQuery,每个术语都可以出现或不出现,并且术语越接近得分就越高。
我尝试使用带有TermQuery的PhraseQuery,但结果并不是我需要的。
我该怎么办?
由于
答案 0 :(得分: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);
答案 1 :(得分:0)
我认为一个带有正面setSlope 的PhraseQuery ,应该与每个术语的TermQuery相结合,应该可以帮到你。也许使用 boost 进行PhraseQuery。
我曾尝试使用TermQuery编写一个PhraseQuery但是 结果不是我需要的。
你对这种组合有什么看法,以及它不是你需要的?