Как выполнить полный запрос на эласти c о китайских иероглифах - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу сделать запрос на полное совпадение на elasti c вот данные:

{
  "organizationId": "ec1c691a4b43e65aebdb2ab9481",
  "organizationName": "工業區"
}

Если я использую этот код

QueryBuilder QueryBuilder = QueryBuilders.termQuery("organizationName","工");

, он получит данные, но это неразумно

И я попробую следующий код 2

QueryBuilder QueryBuilder = QueryBuilders.matchPhraseQuery("organizationName","工業");
QueryBuilder QueryBuilder = QueryBuilders.matchPhraseQuery("organizationName","業區");

Оба возвращают данные, но это не полное совпадение

Может кто-нибудь помочь! Tks

1 Ответ

1 голос
/ 07 февраля 2020

Документация ElasticSearch о запросах термина :

Избегайте использования термина запроса для текстовых полей.

По умолчанию Elasticsearch изменяет значения текстовых полей как часть анализа. Это может затруднить поиск точных совпадений для значений текстовых полей.

Для поиска значений текстовых полей используйте вместо этого запрос на совпадение.

запрос на совпадение - это стандартный запрос для выполнения полнотекстового поиска, включая параметры нечеткого сопоставления.

Так что в вашем примере я бы сделал следующее, чтобы иметь точное поведение сопоставления

QueryBuilders.matchQuery("organizationName", "工業區")

Если вы запрашиваете только часть имени, например 工業 или 業 區 ElasticSearch, не будет возвращать результаты.

...