Я использую Elasticsearch 2.4.3 в моем Spring загрузки приложения и использовать следующий запросElasticsearch Java API - Bool запросов Оператор
QueryBuilder qb = new BoolQueryBuilder()
.must(QueryBuilders.multiMatchQuery(term, "phoneticFirstName", "phoneticLastName", "phoneticLocationName", "phoneticCompanyName")
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND))
.must(QueryBuilders.multiMatchQuery(term, "ngramFirstName^3", "ngramLastName^3", "ngramLocationName^3", "ngramCompanyName^3", "_all")
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND));
Я хочу, чтобы получить ответ, когда первый запрос или второго запроса получить хиты .... Можете ли вы помочь мне изменить это в моем коде, пожалуйста?
UPDATE
"atsCustomPhoneticAnalyzer":{
"type":"custom",
"tokenizer":"whitespace",
"filter":["lowercase","asciifolding","atsPhoneticFilter"]
},
"atsCustomSearchAnalyzer":{
"type":"custom",
"tokenizer":"whitespace",
"filter":["lowercase","asciifolding","umlautStemmer","germanStemmer"]
}
UPDATE # 2
QueryBuilder qb = new BoolQueryBuilder()
.should(QueryBuilders.multiMatchQuery(term, "ngramFirstName", "ngramLastName", "ngramLocationName", "ngramCompanyName")
.type(Type.CROSS_FIELDS)
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND)
.boost(3))
.should(QueryBuilders.multiMatchQuery(term, "phoneticLastName")
.analyzer("atsCustomPhoneticAnalyzer")
.operator(Operator.AND))
.should(QueryBuilders.matchQuery(term, "_all")
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND))
.minimumNumberShouldMatch(1);
У меня 2 показатели: человек и деятельность. Когда я комментирую второй запрос, я получаю Hits от людей и действий. Если все 3 запроса присутствуют, хитов от деятельности больше нет.
Любые идеи?
Изменение '' must' с should' вместо и добавить 'minimumShouldMatch (1)' – Val
Благодаря Val, это работает! Но мой Koelnerphonetic Query не будет работать: (он обрабатывает такие вещи, как «Mayer/Maier/Meyer/Meier» и говорит, что эти звуки одинаковы ... в моем вопросе я обновил мои настройки/настройки для этого –
Хорошо, nvm ..... Я просто использовал неправильный анализатор в первом запросе –