Elasticsearch - Как выделить стоп-слова только для точного соответствия фразы? - PullRequest
0 голосов
/ 05 декабря 2018

Можно ли выделить стоп-слова, встречающиеся в фразе, но не выделить стоп-слова, встречающиеся в одиночку?

Например, я хочу выделить «властелин колец», «кольца»или "господин".Но я не хочу, чтобы Elasticsearch выделил «of» или «the», если они встречаются в одиночку.

Я использую анализатор english_stop в настройках индекса.Этот анализатор удаляет все стоп-слова, поэтому он не выделяет стоп-слова в результатах поиска.Но если я удаляю анализатор english_stop, то она всегда выделяет стоп-слова, такие как «of», «the», даже если они встречаются в одиночку.Я не могу добавить другое поле, используя анализатор английского языка, потому что у меня много документов, и переиндексация обходится слишком дорого.

Есть ли способ выделить стоп-слова только при совпадении фразы, без необходимости изменения схемы индекса?

Мой шаблон индекса:

  "template": "index_name",
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "english": {
            "tokenizer": "tokenizer_name",
            "filter": [
              "standard",
              "lowercase",
              "english_stop",
              "kstem"
            ]
          },

Этовыделенный результат для поискового запроса "Властелин колец"

Властелин из Кольца - эпический роман высокой фантазии, написанный английским автором JRR.Толкиен.История началась как продолжение фэнтезийного романа Толкина 1937 года «Хоббит», но в конечном итоге превратилась в гораздо большую работу.Написанный поэтапно между 1937 и 1949 годами, «1019 * Властелин » из «1021 * Кольца » является одним из самых продаваемых романов

.

1 Ответ

0 голосов
/ 06 февраля 2019

если вы используете строку запроса, используйте свойство фразу_slop, где будут выделены только кольца и лорд.У нас была та же самая проблема, и это решило ее, но у этого также есть ограничение, где ES не сможет различить «Человек на Луне» и «Человек на Луне».он будет выделять события как человека, так и луны, потому что «in» и «on» оба являются стоп-словами.

https://www.elastic.co/guide/en/elasticsearch/guide/master/stopwords-phrases.html#_stopwords

...