我正在使用infinispan缓存进行分发。我们像场景中一样,必须基于确切的字段值来获取对象。因此,我们尝试使用lucene。
类似于任何字段的值匹配的景象应该给对象。为此,我们编写了Follow.It很好用
SearchManager searchManager = Search.getSearchManager(indexingCache);
QueryBuilder queryBuilder = searchManager.buildQueryBuilderForClass(IndexingCallData.class).get();
org.apache.lucene.search.Query luceneQuery = queryBuilder.phrase()
.onField("callerName").matching("6000")
.andField("calleeName").matching(filedValue)
.andField("callerNameForDisplay")
.andField("gatewayIdIngress")
.andField("gatewayIdEgress")
.andField("originalCalleeName")
.sentence("any value here")
.createQuery();
但是,不知道如何用具有适当值的两个不同字段编写完全匹配的查询。我看到了以下示例
org.apache.lucene.search.Query luceneQuery = searchManager.buildQueryBuilderForClass(IndexingCallData.class)
.get()
.keyword()
.onField("callerName").matching("6000")
.createQuery();
这里如何添加一个条件? 。有人可以帮我吗
答案 0 :(得分:2)
我找到了解决方案。即
org.apache.lucene.search.Query subluceneQuery = searchManager.buildQueryBuilderForClass(IndexingCallData.class)
.get()
.keyword()
.onField("callerName").matching("sipp")
.createQuery();
org.apache.lucene.search.Query subluceneQuery2 = searchManager.buildQueryBuilderForClass(IndexingCallData.class)
.get()
.keyword()
.onField("calleeName").matching(filedValue)
.createQuery();
org.apache.lucene.search.Query luceneQuery = searchManager.buildQueryBuilderForClass(IndexingCallData.class)
.get()
.bool()
.must(subluceneQuery)
.must(subluceneQuery2)
.createQuery();