Индексировать только несколько полей в сопоставлении ElasticSearch - PullRequest
0 голосов
/ 16 января 2019

Я работаю с ElasticSearch 6.5.Я проиндексировал CSV-файл, используя следующий код:

def create_index(es_object, index_name):
    created = False
    # index settings
    settings = {
        "settings": {
            "number_of_shards": 1,
            "number_of_replicas": 0,
            "analysis": {
                "filter": {
                    "dbl_metaphone": { 
                        "type":    "phonetic",
                        "encoder": "beider_morse"
                    }
                },
                "analyzer": {
                    "dbl_metaphone": {
                        "tokenizer": "standard",
                        "filter":    "beider_morse"
                    }
                }
            }
        },
        "mappings": {
            "test": {
                #"dynamic": "strict",
                "properties": {
                    "family name": {
                        "type": "text",
                        "index": "analyzed",
                        "fields": {
                            "phonetic": { 
                                "type":     "string",
                                "analyzer": "dbl_metaphone"
                            }
                        }
                    },
                    "Firstname": {
                        "type": "text",
                        "index": "analyzed",
                        "fields": {
                            "phonetic": { 
                                "type":     "string",
                                "analyzer": "dbl_metaphone"
                            }
                        }
                    },

                "Date of birth": {
                    "type": "text",
                    "index": "false"
                },  
                "Place of birth": {
                    "type": "text",
                    "index": "false",
                },

            }
        }
    }
}

    try:
        if not es_object.indices.exists(index_name):
            # Ignore 400 means to ignore "Index Already Exist" error.
            es_object.indices.create(index=index_name, ignore=400, body=settings)
            print('Created Index')
        created = True
    except Exception as ex:
        print(str(ex))
    finally:
        return created

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

Может кто-нибудь объяснить, в чем проблема с моим отображением и как обновить индекс для его достижения?

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вам нужно присвоить индекс как "not_analyzed"

"Date of birth": { "type": "text", "index" : "not_analyzed" },

0 голосов
/ 17 января 2019

Давайте попробуем это с минимальным примером (добавленным через консоль в Kibana, но вы сможете легко изменить его на простые команды curl):

PUT test
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "_doc": {
      "dynamic": "strict",
      "properties": {
        "family name": {
          "type": "text",
          "index": "true"
        },
        "Firstname": {
          "type": "text",
          "index": "true"
        },
        "Date of birth": {
          "type": "text",
          "index": "false"
        }
      }
    }
  }
}

PUT /test/_doc/1
{
  "family name": "foo",
  "Firstname": "bar",
  "Date of birth": "baz"
}

Это работает для меня.Я могу найти foo и bar, но не baz:

enter image description here

Также после обновления шаблона индекса поле даты рождения имеет видни для поиска, ни для агрегирования:

enter image description here

Некоторые быстрые наблюдения:

  1. index равно true илиfalse.Он находится в другом поле, поэтому, вероятно, не связан с вашей проблемой.
  2. Если вы не хотите страдать в будущем, я бы избегал пробелов в именах полей.Я могу видеть, что многие вещи идут не так, как надо.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...