Вариант подсказки Elasticsearch options.text не соответствует фактическому сохраненному документу - PullRequest
0 голосов
/ 19 октября 2018

У меня есть 2 документа в одном и том же индексе в одном и том же шарде.

"profile": {
  "name": "Chinese Flower",
},
"location": {
  "address": {
    "zip": "123",
    "city": "123",
    "address1": "123",
    "state": "123"
  }
} 

и

"profile": {
  "name": "China Delight",
},
"location": {
  "address": {
    "zip": "abc",
    "city": "abc",
    "address1": "abc",
    "state": "abc"
  },
  "geo": {
    "lon": <some lon>,
    "lat": <some lat>
  }
}

они оба имеют одно и то же отображение,

"location": {
  "properties": {
    "address": {
      //stuff
    },
    "geo": {
      "type": "geo_point"
    }
  }
},
"profile": {
  "properties": {
    "name": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        },
        "suggest": {
          "type": "completion",
          "analyzer": "simple",
          "preserve_separators": true,
          "preserve_position_increments": true,
          "max_input_length": 50,
          "contexts": [
            {
              "name": "location",
              "type": "GEO",
              "precision": 6,
              "path": "location.geo"
            }
          ]
        }
      }
    },
  }
}

Когда я выполняю поиск по запросу "chi" в файле profile.name, я получаю оба документа, как и ожидалось.Однако по какой-то причине результат документа «Китайский цветок» имеет дополнительный контекст и содержит текст «Китайское наслаждение», в то время как документ «Китайское наслаждение» не имеет контекста и содержит текст «Китайский цветок»

В частности, результаты(с моими вопросами в комментариях) ...

"text": "chi",
"offset": 0,
"length": 3,
"options": [
  {
    "text": "China Delight", // why is this china delight? shouldn't it be chinese flower?
    "_index": "rests",
    "_type": "rest",
    "_id": "s1lam2QB9nHU-Kj-_oBW",
    "_score": 1,
    "_source": {
      "profile": {
        "name": "Chinese Flower",
      },
      "location": {
        "address": {
          "zip": "123",
          "city": "123",
          "address1": "123",
          "state": "123"
        }
      },
    },
    "contexts": { // where did this context come from? shouldn't this be on the doc with profile.name === "China Delight"?
      "location": [
        "dr5reg"
      ]
    }
  },
  {
    "text": "Chinese Flower", // why is this chinese flower? shouldn't it be china delight?
    "_index": "myindex",
    "_type": "mytype",
    "_id": "sFndmmQB9nHU-Kj-joB4",
    "_score": 1,
    "_source": {
      "profile": {
        "name": "China Delight",
      },
      "location": {
        "address": {
          "zip": "abc",
          "city": "abc",
          "address1": "abc",
          "state": "abc"
        },
        "geo": {
          "lon": <some lon>,
          "lat": <some lat>
        }
      },
    }
  }
]

Когда я делаю текстовое предложение для "китай" или "фарфор", я получаю ожидаемые результаты.Предложение "китайский" приводит к 1 результату для "Китайского цветка" с соответствующим текстовым полем и отсутствующим контекстным полем."china" приводит к 1 результату для "China Delight" с правильным текстовым полем и present context field

Так почему это происходит?Что это значит?Что текстовое поле на самом деле говорит мне?Эластичный поиск документы говорят, что

В текстовом поле используется ввод вашего индексированного предложения

, но это не говорит мне, почему я должен заботитьсяоб этом поле.

Кроме того, может ли это несоответствие контекста быть причиной того, что мой запрос предложения геоконтекста не работает?А именно, приведенный ниже запрос на предложение ничего не дает, когда я ожидаю, что он даст мне восхищение доком Китая.Я попробовал один и тот же запрос (подставил ввод + широта / долгота) для разных документов (не восхищение Китаем или китайский цветок) и получил ожидаемые результаты.

...