Точное совпадение фразы в Java с использованием QueryBuilders? - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь создать точное совпадение в моем Java-API, аналогично тому, как фильтры добавляются в кибане.

Скажем, мой индексированный объект

{
   "fieldValue": "some value"
}

Когда я фильтрую для точногоЗначение в текстовом поле в кибане, он генерирует следующий запрос dsl:

{
  "query": {
    "match": {
      "fieldValue": {
        "query": "some value",
        "type": "phrase"
      }
    }
  }
}

Это приводит к желаемым результатам, потому что, когда я ищу "некоторые", я хочу только точные совпадения. то есть «некоторое значение» не должно быть возвращено. Приведенный выше запрос кибана дает желаемое поведение.

MatchQueryBuilder

Принимает fieldName / объект без компоновщика для "type"

QueryBuilder queryBuilder = QueryBuilders.matchQuery("fieldValue", "some value");

Resultsв сгенерированном запросе:

  "query" : {
    "match" : {
      "fieldValue" : {
        "value" : "some value",
        "boost" : 1.0
      }
    }
  },

В этом случае значение не соответствует точно. Если я изменю поле на value.keyword, результаты не будут возвращены.

Кроме того, я попытался использовать MatchPhraseQueryBuilder, но у меня возникла та же проблема. На данный момент я думаю о том, чтобы написать свой собственный конструктор запросов, но похоже, что это поведение уже реализовано.

Я нахожусь на Elastic Search версии 6.8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...