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

Bor*_*ens 5 lucene lucene.net full-text-search information-retrieval

这个问题是从分拆这个问题.我的询问是双重的,但由于两者都是相关的,我认为将它们放在一起是个好主意.

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

- 编辑 -

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

  1. 名字
  2. 年龄
  3. 地址
  4. 一切

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

我该怎么办呢?

Fre*_*Foo 6

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

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

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

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