Java Lucene复合查询搜索

Java Lucene复合查询搜索,java,lucene,full-text-search,Java,Lucene,Full Text Search,我想在lucene索引中查询一些交叉点 数据: 字段1字段2字段3 行ID1值1值2 行ID2值3值4 行ID3值4值5 行ID3值6值5 查询: (字段2:VALUE4和字段3:VALUE5)(在字段1上相交)(字段2:VALUE4和字段3:VALUE5) 所以我的最终结果应该是ID3 任何意见都会大有裨益 提前谢谢。我不明白你想做什么,那里没有交叉路口 如果你想问我如何在lucene索引中进行复合搜索(AND),请参见下文 TermQuery tq1= new TermQuery(new T

我想在lucene索引中查询一些交叉点

数据:

字段1字段2字段3
行ID1值1值2
行ID2值3值4
行ID3值4值5
行ID3值6值5

查询: (字段2:VALUE4和字段3:VALUE5)(在字段1上相交)(字段2:VALUE4和字段3:VALUE5)

所以我的最终结果应该是ID3

任何意见都会大有裨益


提前谢谢。

我不明白你想做什么,那里没有交叉路口

如果你想问我如何在lucene索引中进行复合搜索(AND),请参见下文

TermQuery tq1= new TermQuery(new Term("VALUE4", FIELD2));
TermQuery tq2= new TermQuery(new Term("VALUE5", FIELD3));
// BooleanClauses Enum SHOULD says Use this operator for clauses that should appear in the matching documents.
BooleanQuery bq = new BooleanQuery();
bq.add(tq1,BooleanClause.Occur.SHOULD);
bq.add(tq2,BooleanClause.Occur.SHOULD);
IndexSearcher searcher = new IndexSearcher(index, true);
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
//Iterate Collector hits
//process HitCollector or whatever terms, results,etc
编辑:


让我在其中再添加一些数据

PRODUCT_ID|HEADER_ID|HEADER_VALUE

PRODUCT_01|HEADER_01|XYZ
PRODUCT_02|HEADER_02|XYZ
PRODUCT_02|HEADER_03|ABC
PRODUCT_03|HEADER_03|ABC
现在,假设我从UI中选择了如下标题:

带有值XYZ的标题_02

带有ABC值的标题_03

理想情况下,我应该得到(标题_id 02,03与值XYZ,ABC匹配的预期产品)产品_02作为结果。我真的不知道查询中的产品

如果我使用或查询,我将得到产品02以及产品03,这将是错误的。 如果我查询,我将一无所获,因为Lucene一次只做一个文档

我希望这次我的问题是描述性的


这是你的答复。:)

Lucene核心是Java的,所以你可以相应地标记它:D。。。必须在一行中检查所有四个值。。。结果一事无成。。。我已经在和条件中提到了这个问题。如果您想要一些聚合(GroupBy)功能,请在我的Knowledge中。lucene中不存在这样的东西,你可以做一个或搜索,编写一个包装类来聚合结果,我看到Collectorsubclass有一个优先队列,它很容易在上面实现聚合功能?你怎么认为
PRODUCT_ID|HEADER_ID|HEADER_VALUE

PRODUCT_01|HEADER_01|XYZ
PRODUCT_02|HEADER_02|XYZ
PRODUCT_02|HEADER_03|ABC
PRODUCT_03|HEADER_03|ABC