Lucene短语查询与OR中的术语

时间:2013-10-05 19:16:37

标签: search lucene

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

  1. 红房子很漂亮
  2. 房子很小
  3. 红色鱼
  4. 红色和黄色的房子很大
  5. 如果我搜索“红房子”,我应该使用什么样的查询来检索文档,以便排名如下:

    1. red house 很漂亮大[匹配:红房子]
    2. 红色和黄色的房子很大[匹配:红色x x房子]
    3. 房子很少[匹配:房子]
    4. 红色鱼[匹配:红色]
    5. 我需要的是对与我搜索过的短语匹配的文档给出较高的排名,对只有一部分搜索短语的文档给出较低的分数。 请注意,字符串查询还可以包含两个以上的术语。

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

      我尝试使用带有TermQuery的PhraseQuery,但结果并不是我需要的。

      我该怎么办?

      由于

2 个答案:

答案 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但是   结果不是我需要的。

你对这种组合有什么看法,以及它不是你需要的?