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

问题描述 投票:1回答:1

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

这里如何添加一个条件? 。任何人都可以帮助我

hibernate lucene infinispan
1个回答
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();         
© www.soinside.com 2019 - 2024. All rights reserved.