如何创建Lucene查询,该查询应给出仅与给定两个字段匹配两个给定值的对象?

时间:2019-03-18 12:43:02

标签: hibernate lucene infinispan

我正在使用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();

这里如何添加一个条件? 。有人可以帮我吗

1 个答案:

答案 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();