1. Хотите точное совпадение строки без применения анализатора: определите тип как keyword, а не text
  2. Массовое добавление данных: curl -H "Content-Type:application/json" -XPUT 127.0.0.1:9200/_bulk?pretty --data-binary @movies.json
  3. Обработка параллелизма: используйте if_seq_no=10 или retry_on_conflict=5 для оптимистичного управления параллелизмом.
  4. Выберите между нормализацией или денормализацией: нормализованные данные сводят к минимуму объем хранилища и их легко изменять. Денормализованные данные сводят к минимуму количество запросов.
  5. Определите родительско-дочерние отношения:
'"mappings":{
    "properties":{
        "film_to_franchise":{
             "type":"join",
             "relations":{"franchise":"film"}
}}}}'

6. Поиск с использованием отношений "родитель-ребенок".

'{
"query":{
    "has_parent":{
        "parent_type":"franchise",
        "query":{
           "match":{
               "title":"Star Wars"
}}}}}'
'{
"query":{
    "has_child":{
        "type":"film",
        "query":{
            "match":{
                "title":"The Force Awakens"
}}}}}'

7. Получите состояние кластера.

curl -H "Content-Type:application/json" -XGET "http://127.0.0.1:9200/_cluster/state?pretty=true" >> es-cluster-state.json

8. Отображение разнесения и плоского типа данных: все узлы должны быть синхронизированы с обновленным состоянием кластера перед выполнением основных операций, таких как индексирование и поиск. Это может вызвать проблемы с памятью в узлах и вызвать задержку. Когда эластичный поисковый кластер дает сбой из-за слишком большого количества полей на карте, мы называем это взрывом сопоставления. Вы можете использовать "type":"flattened" при сопоставлении, чтобы избежать добавления новых полей при сопоставлении, когда реальные данные фактически содержат новые поля.

9. Обратная сторона уплощенного типа данных: они будут обрабатываться как keyword. Это означает, что у него ограниченные возможности поиска и анализа, ни анализатор, ни токенизатор не будут применяться к этим новым полям. Например, он не поддерживает частичное совпадение и не может найти «Bionic Beaver», если ваше совпадение - «Beaver».

10. Поддерживаемые запросы для плоского типа данных:

  • термин, условия и набор условий
  • приставка
  • диапазон (нечисловые операции с диапазоном)
  • match и multi_match (мы должны указать точные ключевые слова)
  • query_string и simple_query_string
  • существуют

11. Запрос против фильтра

  • Фильтр: задавайте вопросы «да» или «нет», быстрее и с возможностью кеширования, завернутые в "filter":{}
  • Запрос: вернуть данные с точки зрения релевантности, заключенные в "query":{}
  • Они могут гнездиться друг в друге

12. Подберите фразу

{
"query":{
    "match":{
        "title":"star wars"
}}}
{
"query":{
    "match_phrase":{
        "title":{"query":"star wars", "slop":1}
}}}

13. Поиск

curl -H "Content-Type:application/json" -XGET "127.0.0.1:9200/movies/_search?q=%2Byear%3A%3E>1980+%3Btitle%3Astar%20wars&pretty"