Эластичный поиск Поиск по ключевым словам в текстовом поле не дает результатов - PullRequest
0 голосов
/ 23 декабря 2019

У меня есть следующее сопоставление для моего индекса.

    {
  "mappings": {
    "properties": {
      "author": {
        "type": "text"
      },
      "book_name": {
        "type": "keyword"
      }
    }
  }
}

Ниже приведены документы, которые проиндексированы.

  [
  {
    "author": "Conan Doyale",
    "book_name": "Sherlock Holmes"
  },
  {
    "author": "Arabian Nights",
    "book_name": "Arabian Night"
  },
  {
    "author": "Bride and Prejeduice",
    "book_name": "Gurnindher Chadda"
  },
  {
    "author": "Pride and Prejeduice",
    "book_name": "Jane Austen"
  },
  {
    "author": "Ashwin Sanghi",
    "book_name": "Krishna Key"
  },
  {
    "author": "Ashwin Sanghi",
    "book_name": "Krishna lock"
  },
  {
    "author": "Arabian Night",
    "book_name": "Arabian Night"
  }
]

Теперь, если я запрашиваю поле автора, используя имя поля. ключевое слово, он не возвращает результат.

{
  "query": {
    "match": {
      "author.keyword": "Arabian Night"
    }
  }
}

Насколько я понимаю, он вернет следующий документ

{
    "author": "Arabian Night",
    "book_name": "Arabian Night"
  }

Кроме того, следующий запрос термина также не вернул никакого результата. Я ожидаю некоторых результатов для того же.

{
  "query": {
    "term": {
      "author": "Arabian"
    }
  }
}

1 Ответ

0 голосов
/ 23 декабря 2019

Если я запрашиваю поле автора с помощью fieldname.keyword, он не возвращает результат.

Это происходит потому, что подполя с именем keyword не существует. Чтобы вышеперечисленное работало, отображение должно было выглядеть следующим образом:

{
  "mappings": {
    "properties": {
      "author": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      },
      "book_name": {
        "type": "keyword"
      }
    }
  }
}

Обновите отображение и повторно индексируйте документы снова.

Кроме того, следующий запрос термина также не выполнялсявернуть любой результат. Я ожидаю некоторых результатов для того же.

В запросе термина вы запрашиваете поле author, тип которого text. По умолчанию в поле типа text используется стандартный анализатор . Таким образом, Arabian Night будет проиндексирован как два условия arabian и night. Обратите внимание, что изменения в случае. Стандартный анализатор изменяет регистр всех терминов на строчные при индексации. Поэтому запрос запроса не будет соответствовать Arabian, но будет соответствовать arabian. Таким образом, запрос ниже термин будет работать:

{
  "query": {
    "term": {
      "author": "arabian"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...