Фильтр ElasticSearch по подстановочному знаку

Я пытаюсь отфильтровать свои результаты по подстановочному знаку.

пример моих записей:

....
"_source" : {
      "urlSlug" : "entry-title",
      "revisions" : [
        {
          "title" : "Entry title",
          "context" : "NKD"
        }
      ]
 }

каждая ревизия может иметь разный контекст с разным порядком.

И когда я ищу запись, я хочу искать только объекты с таким контекстом, как «N». Поэтому я выполняю вложенный запрос с match_all и подстановочным знаком.

{"query":{"bool":{"must":[{"query_string":{"query":"*entry*"}},{"nested":{"path":"revisions","query":{"bool":{"should":[{"match_all":{}}],"filter":[{"wildcard":{"revisions.context":{"value":"*N*","boost":1}}}]}}}}]}},"size":10}

Когда я запускаю запрос, я получаю нулевой результат. И не могу понять, как ограничить результаты.

Я использую для этого FosElastica со следующей конфигурацией:

indexes:
        app:
            types:
              entity:
                properties:
                    urlSlug: ~
                    revisions:
                      type: "nested"
                      properties:
                        title: { type: text,boost: 10 }
                        context: { type: text }

и мой построитель запросов выглядит так:

$boolQuery = new ESQuery\BoolQuery();

    $fieldQuery = new ESQuery\QueryString();
    $fieldQuery->setQuery('*' . $query . '*');
    $boolQuery->addMust($fieldQuery);

        $nestedQuery = new ESQuery\Nested();
        $nestedQuery->setPath('revisions');

            $nestedBoolQuery = new ESQuery\BoolQuery();
                $matchAllQuery = new ESQuery\MatchAll();
            $nestedBoolQuery->addShould($matchAllQuery);

                $filterQuery = new ESQuery\Wildcard();
                $filterQuery->setValue('revisions.context','*N*');
            $nestedBoolQuery->addFilter($filterQuery);

        $nestedQuery->setQuery($nestedBoolQuery);


    $boolQuery->addMust($nestedQuery);

$result = $finder->findHybrid($boolQuery,self::AUTOCOMPLETE_MAX_RESULTS);

Эластичный поиск версии 5.2.2


person zajca    schedule 14.03.2017    source источник


Ответы (1)


Ну, я узнал, в чем проблема в моем запросе.

это рабочий:

{"query":{"bool":{"must":[{"query_string":{"query":"*komi*"}}],"filter":[{"nested":{"path":"revisions","query":{"wildcard":{"revisions.context":{"value":"*n*","boost":1}}}}}]}},"size":10}

вся проблема заключалась в поиске подстановочных знаков в верхнем регистре. Я искал *N* и не получил никаких результатов, а с *n* все в порядке.

person zajca    schedule 15.03.2017