не работает термин termsearch - PullRequest
0 голосов
/ 30 мая 2018

У меня проблема с термином запрос вasticsearch.Я отправляю следующий запрос:

{
    "query": {
       "term": {
            "title":"Test1"
        }
    }
}

У меня есть пустой результат:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}

Но если я отправлю следующее:

{
    "query": {
       "term": {
            "root":true
        }
    }
}

У меня есть:

{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 3,
        "max_score": 0.2876821,
        "hits": [
            {
                "_index": "content_2018-05-30-092148",
                "_type": "topic",
                "_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb1",
                "_score": 0.2876821,
                "_source": {
                    "_meta": {
                        "model": "Secafi\\Content\\Topic"
                    },
                    "id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb1",
                    "title": "Test2",
                    "root": true
                }
            },
            {
                "_index": "content_2018-05-30-092148",
                "_type": "topic",
                "_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb2",
                "_score": 0.2876821,
                "_source": {
                    "_meta": {
                        "model": "Secafi\\Content\\Topic"
                    },
                    "id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb2",
                    "title": "Test3",
                    "root": true
                }
            },
            {
                "_index": "content_2018-05-30-092148",
                "_type": "topic",
                "_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbebc",
                "_score": 0.2876821,
                "_source": {
                    "_meta": {
                        "model": "Secafi\\Content\\Topic"
                    },
                    "id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbebc",
                    "title": "Test1",
                    "root": true
                }
            }
        ]
    }
}

У меня тот же результат, если я выполняю запрос на совпадение в поле заголовка, он никогда не возвращает документ.

Что не так.Почему первый запрос не возвращает документ Test1?

1 Ответ

0 голосов
/ 30 мая 2018

Термин запрос ищет точный термин.Вероятно, вы используете стандартный анализатор, который имеет строчный фильтр.Итак, вы ищете именно «Term1», когда в индексе есть «term1».

Термин отлично подходит для таких вещей, как числа с точным соответствием или идентификаторы (например, 9844-9332-22333).Меньше так для таких полей, как заголовки сообщений.

Чтобы подтвердить это, вы можете сделать:

{
    "query": {
       "term": {
            "title.keyword":"Test1"
        }
    }
}

, который должен работать, если ваша запись проиндексирована с точным заголовком «Test1».При этом вместо стандартного анализатора используется анализатор ключевых слов (обратите внимание на «.keyword» после заголовка).В последних версияхasticsearch анализатор ключевых слов добавляется по умолчанию, если вы не переопределите это поведение.Ключевое слово - это анализатор "noop" с точным соответствием, который возвращает всю строку в виде одного токена для сравнения.

Для заголовка вам, вероятно, понадобится:

{
    "query": {
       "match": {
            "title":"Test1"
        }
    }
}

Запрос на совпадение пропускает вашу входную строку через стандартный анализатор, который по умолчанию использовался для индексации документа (строчные буквы и т. Д.), Так чтоasticsearchможет сопоставить текст вашего запроса с тем, что находится в индексеasticsearch.

Ознакомьтесь с документацией для получения более подробной информации о соответствии с термином.https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

...