почему индекс false все еще доступен для поиска? - PullRequest
0 голосов
/ 22 января 2019

Я озадачен этим

У меня есть следующее поле, определенное в упругом

  "Email": {
    "type": "text",
    "boost": 0,
    "index": false,
    "analyzer": "standard"
  }

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

  "highlight": {
    "properties.Email": [
      "<mark>someone</mark>@somewhere.com"
    ]
  }

Насколько я понимаю, индекс: false должен препятствовать тому, чтобы это поле было доступным для поиска, и что, если оно не доступно для поиска, не должно включаться в выделенные результаты

так что мое понимание неверно или что-то не так, иначе неправильно

РЕДАКТИРОВАТЬ: дополнительная информация, запрашиваемая для полного сопоставления, была запрошена оригинальными данными GeoJson

 "index_5b17968c789cdb21dea23bfa": {
    "mappings": {
      "client_record": {
        "properties": {
          "geometry": {
            "type": "geo_shape"
          },
          "job_id": {
            "type": "keyword",
            "boost": 0,
            "index": false
          },
          "properties": {
            "properties": {
              "Address": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Address_1": {
                "type": "text",
                "boost": 0,
                "index": false,
                "analyzer": "standard"
              },
              "Address_2": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Address_3": {
                "type": "text",
                "boost": 0,
                "index": false,
                "analyzer": "standard"
              },
              "Company": {
                "type": "keyword",
                "boost": 18
              },
              "County": {
                "type": "text",
                "boost": 0,
                "index": false,
                "analyzer": "standard"
              },
              "Email": {
                "type": "text",
                "boost": 0,
                "index": false,
                "analyzer": "standard"
              },
              "Ref_ID": {
                "type": "keyword",
                "boost": 27
              },
              "FirstName": {
                "type": "text",
                "boost": 0,
                "index": false,
                "analyzer": "standard"
              },
              "Job_Title": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Land_Description": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Registry_Title": {
                "type": "keyword",
                "boost": 18
              },
              "LastName": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Middlename": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Mobile": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Name": {
                "type": "keyword",
                "boost": 18
              },
              "Notes": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Record_Type": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Parish_Council": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Item_Name": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Postcode": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Preferred_Contact_Method": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Prior_Notification": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Tel": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Tenure": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Title": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Town": {
                "type": "keyword",
                "boost": 0,
                "index": false
              },
              "Work_Tel": {
                "type": "keyword",
                "boost": 0,
                "index": false
              }
            }
          },
          "type": {
            "type": "keyword",
            "boost": 0,
            "index": false
          }
        }
      }
    }
  }
}

была запрошена логика поиска, поэтому добавлениеэто здесь

Я использую интерфейс PHP, но это поисковый запрос

, где $ q - строка, предоставленная индексом пользователя $, - это индексы, по которым производится поиск

[
    'index' => $index ,
    'ignore_unavailable'=>true,
    'size' => 20,
    'body' => [
        'query' => [
            'bool' => [
                'must' => [
                    "bool" => [
                        "should" => [
                            [
                                "match_phrase" => [
                                    "_all" => [
                                        "query" => $q,
                                        "boost" => 8
                                    ]
                                ]
                            ],
                            [
                                "match" => [
                                    "_all" => [
                                        "query" => $q,
                                        "operator"=> "and",
                                        "boost" => 2
                                    ]
                                ]
                            ],
                            [
                                "match" => [
                                    "_all" => [
                                        "query" => $q,
                                        "boost" => 1
                                    ]
                                ]
                            ],
                            [
                                "wildcard" => [
                                    "_all" => [
                                        "wildcard" => '*' . $q . '*',
                                        "boost" => 0.5
                                    ]
                                ]
                            ]
                        ]
                    ]

                ]
            ]
        ],
        'highlight' => [
            'pre_tags' => ['<mark>'],
            'post_tags' => ['</mark>'],
            'fields' => [
                '*' => [
                    'require_field_match' => false
                ]
            ]
        ]
    ]
];

1 Ответ

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

Это тема Elasticsearch Internals. Короче говоря, информация остается в _source, так как она используется подсветкой.

Немного подробнее. Цитирование Параметры отображения - индекс :

Параметр index определяет, индексируются ли значения полей. Он принимает true или false и по умолчанию true. Поля, которые не проиндексированы, не подлежат запросу.

Это все к этому. Значение не входит в инвертированный индекс Apache Lucene, поэтому запрос бессмысленен. Однако поле остается в _source и все еще может использоваться для агрегации. Пример для агрегации: предположим, вы хотите знать, сколько документов существует на конкретные почтовые адреса.

Если вы не хотите использовать его для агрегатов, вы можете добавить "enabled": false параметр отображения .

Подсветка - это еще одна концепция.

Если поле не сохраняется (отображение не устанавливает store в true), загружается фактический _source, а соответствующее поле извлекается из _source.

Вкратце это доступ к полю _source. Информация остается в _source для параметров отображения index и enabled. Это в большинстве случаев обязательно. Если вы отключите источник, вы не сможете

  • обновить документ (исправление данных)
  • переиндексация индекса (исправление данных)
  • обновление до более новой индексной версии
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...