如何创建更复杂的Lucene查询字符串?

时间:2009-02-10 14:22:24

标签: lucene full-text-search lucene.net information-retrieval

这个问题是this问题的副产品。 我的询问是双重的,但由于两者都是相关的,我认为将它们放在一起是个好主意。

  • 如何以编程方式创建查询。我知道我可以开始创建字符串并使用查询解析器解析该字符串。但是,当我从其他资源中收集一些信息时,有一种编程方式可以做到这一点。
  • Lucene查询的语法规则是什么?

- 编辑 -

我将为我想要的查询提供一个需求示例:
假设我有5个字段:

  1. 名字
  2. 姓氏
  3. 年龄
  4. 地址
  5. 一切
  6. 所有字段都是可选字段,最后一个字段应搜索所有其他字段。 我查看每个字段,看看它是否是IsNullOrEmpty()。如果不是,我想附加我的查询的一部分,以便添加相关的搜索部分 名字和姓氏应该是完全匹配,并且比其他字段具有更多权重。年龄是一个字符串,应该完全匹配。地址可以按顺序变化。一切都可以按顺序变化。

    我应该怎么做?

1 个答案:

答案 0 :(得分:6)

使用BooleanQuery类撰写查询对象。创建其中一个并向其添加()其他Query对象以创建更大的析取查询:

  • BooleanQuery q = new BooleanQuery();
  • q.add(qFirstName,Occur.SHOULD);
  • q.add(qLastName,Occur.SHOULD);
  • ...

可以使用Term和TermQuery类构建原子查询。

(链接和示例适用于Lucene Java,但.NET应该类似。)