Как создать запрос lucene, который должен давать объекты, которые соответствуют только двум данным значениям с данными двумя полями? - PullRequest
1 голос
/ 18 марта 2019

Я использую кэш Infispan для распределения. У нас есть scenerio, как и для получения объектов на основе точного значения поля. Итак, мы попробовали 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();

Но, не знаю, как написать запрос, например точные совпадения, с двумя различными полями с соответствующим значением. Я видел пример, такой как follow

org.apache.lucene.search.Query luceneQuery = searchManager.buildQueryBuilderForClass(IndexingCallData.class)
            .get()
            .keyword()        
            .onField("callerName").matching("6000")         
            .createQuery();

Здесь Как добавить еще одно условие ??Кто-нибудь может мне помочь, пожалуйста

1 Ответ

2 голосов
/ 20 марта 2019

Я нашел решение. то есть

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();         
...