Выберите строки после объединения 3 полей из индекса в Luolne's BoolQueryBuilder - PullRequest
0 голосов
/ 11 июня 2019

Использование Hibernate Search 5.9 и эластичного сервера 5.6.10.

Я пытаюсь сохранить данные из 3 полей в одно поле с аннотацией @Transient.Но хотя поля отображаются в структуре индекса, то же самое не отображается при запросе индекса с помощью curl / chrome.Его нет в индексе, и данные теряются таким образом.

Database column: Data
a. address: 123, a street, city, state
   Fillr1 : 000
   Fillr2: 0
   Fillr3: 358

b. address: 234, a street, city, state
   Fillr1 : 000
   Fillr2: 0
   Fillr3: 258

b. address: 567, a street, city, state
   Fillr1 : 000
   Fillr2: 0
   Fillr3: 005

Я хочу объединить / или, возможно, нет и сравнить три поля Fillr1 + Fillr2 + Fillr3 с массивом входных данных, полученных от внешнего интерфейсаприложение.Предположим, что входной массив содержит данные как:

[0000004, 0000005, 0000258, 0000358, 0035648]

Я просто хочу выбрать строку, содержащую данные, соответствующие элементам входного массива.

До сих пор я пробовал фильтры, должен/ Если запросы выполняются вместе с основными данными выбора, ниже приведена последняя версия кода, которую я пробовал.Это работает для сценария, когда входной массив содержит данные, которые находятся на сервере эластичных данных, но если я удаляю одну запись, которая содержит данные на эластичном сервере, но ее нет в массиве входных данных, то также результирующий набор содержит данные, относящиеся кудаленная запись.

agent number e.g. 0000258

 BoolQueryBuilder matchQueryBuilder = QueryBuilders.boolQuery();
                     matchQueryBuilder.must(QueryBuilders.matchQuery("cltseqnum", clt0300to.getCltseqnum()));
                     matchQueryBuilder.must(QueryBuilders.matchQuery("addrseqnum", clt0300to.getAddrseqnum()));



                     if(!allAgentsAssignedFlag){
                         BoolQueryBuilder secondQuery;
                         for(String agentNum : allUserAgenciesList) {//allUserAgenciesList -> [0000004, 0000005, 0000258, 0000358, 0035648]
                             secondQuery = QueryBuilders.boolQuery();

                             secondQuery.must(QueryBuilders.matchQuery("policies.fillr1",agentNum.substring(0, 3)))
                             .must(QueryBuilders.matchQuery("policies.rpt0agt0nr",agentNum.substring(3, 4)))
                             .must(QueryBuilders.matchQuery("policies.fillr2",agentNum.substring(4, 7)));
                             matchQueryBuilder.must(secondQuery);


                         }

                     }

Ниже приведен json-запрос:

{
  "bool" : {
    "must" : [
      {
        "match" : {
          "cltseqnum" : {
            "query" : 335,
            "operator" : "OR",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : true,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "boost" : 1.0
          }
        }
      },
      {
        "match" : {
          "addrseqnum" : {
            "query" : 1,
            "operator" : "OR",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : true,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "boost" : 1.0
          }
        }
      }
    ],
    "should" : [
      {
        "bool" : {
          "must" : [
            {
              "match" : {
                "policies.fillr1" : {
                  "query" : "000",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.rpt0agt0nr" : {
                  "query" : "0",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.fillr2" : {
                  "query" : "004",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            }
          ],
          "disable_coord" : false,
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      },
      {
        "bool" : {
          "must" : [
            {
              "match" : {
                "policies.fillr1" : {
                  "query" : "000",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.rpt0agt0nr" : {
                  "query" : "0",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.fillr2" : {
                  "query" : "005",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            }
          ],
          "disable_coord" : false,
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      },
      {
        "bool" : {
          "must" : [
            {
              "match" : {
                "policies.fillr1" : {
                  "query" : "000",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.rpt0agt0nr" : {
                  "query" : "0",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.fillr2" : {
                  "query" : "258",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            }
          ],
          "disable_coord" : false,
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      },
      {
        "bool" : {
          "must" : [
            {
              "match" : {
                "policies.fillr1" : {
                  "query" : "000",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.rpt0agt0nr" : {
                  "query" : "0",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.fillr2" : {
                  "query" : "358",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            }
          ],
          "disable_coord" : false,
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      },
      {
        "bool" : {
          "must" : [
            {
              "match" : {
                "policies.fillr1" : {
                  "query" : "003",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.rpt0agt0nr" : {
                  "query" : "5",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            },
            {
              "match" : {
                "policies.fillr2" : {
                  "query" : "648",
                  "operator" : "OR",
                  "prefix_length" : 0,
                  "max_expansions" : 50,
                  "fuzzy_transpositions" : true,
                  "lenient" : false,
                  "zero_terms_query" : "NONE",
                  "boost" : 1.0
                }
              }
            }
          ],
          "disable_coord" : false,
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      }
    ],
    "disable_coord" : false,
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}

1 Ответ

0 голосов
/ 13 июня 2019

Получил обходной путь для этого, использовал аннотацию @Transient в методе получения нового настраиваемого поля (которое недоступно на стороне базы данных) и связал мои данные с ним.Для получения более подробной информации перейдите по ссылке ниже:

@ Переходный процесс с аннотированным полем @Field, не отображаемым в индексе на сервере эластичных данных

...