我正在使用infinispan缓存进行分发。我们有场景像必须根据确切的字段值获取对象。所以,我们尝试了lucene。
scenerio喜欢与任何字段匹配的值应该给对象。为此,我们写了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();
这里如何添加一个条件? 。任何人都可以帮助我
我找到了解决方案。那是,
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();