Запит до спільного запиту: повинен, повинен, must_not
Якщо ми хочемо запитати щось подібне до «content with BMW, але не in tag», нам потрібно використовувати bool federated query.
Спільний запит використовуватиме три ключові слова: must, should, must_not.
Ці три можна зрозуміти таким чином
must: Документ має точно відповідати умовам
should: має бути більше ніж одна умова, і якщо хоча б одна умова виконана, цей документ виконає повинні
must_not:Документ не повинен відповідати критеріям
Офіційний вступ до сайту:https://www.elastic.co/guide/cn/ ... bining-filters.html
Запит DSL
match_all Запит
Усі документи можна запитувати, і це стандартний оператор без умов запиту.
Цей запит часто використовується для об'єднання фільтрів. Наприклад, потрібно отримати всі поштові скриньки, і всі релевантності документів однакові, тому _score ви отримуєте 1.
Запит на збіг
Відповідний запит — це стандартний запит, який використовується, незалежно від того, чи потрібен вам повнотекстовий запит, чи точний запит.
Якщо ви використовуєте match для запиту до повного тексту поля, аналізатор розбиратиме символи запиту перед самим запитом:
Якщо ви вкажете точне значення у розділі match, він шукатиме ваше значення, коли зустрічає число, дату, булеву або not_analyzed рядок:
Порада: При пошуку точного збігу найкраще використовувати оператори фільтра, оскільки оператори фільтра кешують дані.
Відповідний запит може шукати лише точне значення, яке вказує точне поле, і все, що потрібно зробити — це вказати правильну назву поля, щоб уникнути синтаксичних помилок.
multi_match Запит
multi_match запит дозволяє одночасно шукати кілька полів на основі відповідного запиту і одночасно знаходити одне в кількох полях:
Запит у bool
Запити Bool подібні до фільтрації булів і використовуються для об'єднання кількох клауз запитів. Різниця полягає в тому, що бул-фільтр може безпосередньо визначати, чи успішне співпадіння, тоді як бульний запит обчислює _score (кореляційний бал) кожної клаузи запиту.
must:: 查询指定文档一定要被包含。 must_not:: Документи, зазначені у запиті, не повинні бути включені.
should:: 查询指定文档,有则可以为文档相关性加分。
Наступний запит виявить, що поле заголовка містить «як заробити мільйони», а поле «тег» не позначене як спам. Якщо вони позначені як «зірочкові» або мають дату випуску до 2014 року, то ці відповідні документи будуть на вищому рівні, ніж подібні сайти:
Порада: якщо в запиті bool немає пункту «must», то має бути принаймні один пункт «should». Але якщо існує обов'язкова клауза, то запит також може бути виконаний без необхідності.
Запит до диких карт
Використовуйте стандартні запити для wildcard shell
Наступний запит відповідає документам, що містять W1F 7HW та W2F 8HW:
Наприклад, наступний запит для hostname збігається з наступним wildcard shell:
Запит у вигляді regexp
Припустимо, ви хочете зіставити лише поштові індекси, які починаються на W, а потім з номерами. Використання запитів у вигляді regexp дозволяє писати більш складні шаблони:
Цей регулярний вираз визначає, що запис має починатися з W, за ним слідує число від 0 до 9, а потім один або кілька інших символів.
Наступний приклад — це всі регулярні початки з wxopen
Запит до префікса
З якого символу він починається, можна використати префікс простіше, як у наведеному нижче прикладі:
Підбор фраз
Коли потрібно знайти кілька слів поруч, використовуйте match_phrase запит:
Подібно до відповідних запитів, match_phrase спочатку аналізує рядок запиту, щоб отримати список термінів. Він шукатиме всі записи, Однак зберігаються лише документи, що містять усі пошукові терміни, і розташування термінів має бути поруч. Запит на фразу Quick Fox не збігається будь-яка наша документація, оскільки жодна документація не містить швидких і блокових записів, розташованих поруч. match_phrase запит також може бути написаний як відповідний запит типової фрази:
|