Я хочу найти точный термин подстроки, точный термин, а не только часть термина - PullRequest
0 голосов
/ 18 мая 2019

У меня есть группа json-документов из викиданных (http://www.wikidata.org)) для индексации на поиск в поиске. У него есть несколько полей. Например, это выглядит ниже.

{
   eId:Q25338
   eLabel:"The Little Prince, Little Prince",
   ...
}

Здесь я хочу, чтобы пользователь выполнял поиск «точного термина», а не его части. Это означает, что если пользователь ищет «принц», я не хочу показывать этот документ в результатах поиска. Когда пользователь вводит весь термин «маленький принц» или «маленький принц», я хочу включить этот json в результат поиска, а именно.

  • Должен ли я предварительно обработать все запятые в отдельном предложении (у некоторых eLabel есть десятки элементов в списке), составить из него кучу разных документов и, соответственно, создать поле ключевого слова?
  • Если нет, как я могу создать файл сопоставления, чтобы выполнить поиск в соответствии с ожиданиями?

Мой текущий Mappings.json.

  "mappings": {
    "entity": {
      "properties": {
        "eLabel": { # want to replace
          "type": "text" ,
          "index_options": "docs" ,
          "analyzer": "my_analyzer"
        } ,
        "eid": {
          "type": "keyword"
        } ,
        "subclass": {
          "type": "boolean"
        } ,
        "pLabel": {
          "type": "text" ,
          "index_options": "docs" ,
          "analyzer": "my_analyzer"
        } ,
        "prop_id": {
          "type": "keyword"
        } ,
        "pType": {
          "type": "keyword"
        } ,
        "way": {
          "type": "keyword"
        } ,
        "chain": {
          "type": "integer"
        } ,
        "siteKey": {
          "type": "keyword"
        },
        "version": {
          "type": "integer"
        },
        "docId": {
          "type": "integer"
        }
      }
    }
  }

1 Ответ

0 голосов
/ 19 мая 2019

Должен ли я предварительно обработать все запятые в отдельном предложении (у некоторых eLabel есть десятки элементов в списке), составить из него кучу разных документов и сделать поле для ключевого слова соответственно?

Это именно то, что вы должны сделать. Elasticsearch не может обработать список через запятую для вас. Он будет думать, что ваши данные - это всего лишь одна целая строка. Но если вы предварительно обработаете его, а затем сделаете полученное поле полем Keyword , это будет работать очень хорошо - это именно то, для чего предназначен тип поля Keyword. Я бы порекомендовал использовать термин запроса для поиска точных совпадений. (В отличие от запроса на совпадение, запрос Term не анализирует входящий запрос и, следовательно, более эффективен.)

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