Синонимы нарушают псевдоним типа данных - PullRequest
0 голосов
/ 20 апреля 2019

При использовании типов данных псевдонимов и синонимов в индексе кажется, что включение синонимов нарушает функциональность поля псевдонимов.

Чтобы воссоздать проблему:

# Create the index
PUT /alias.synonyms
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "tokenizer": "standard",
          "filter": [
            "my_synonyms"
          ]
        }
      },
      "filter": {
        "my_synonyms": {
          "type": "synonym",
          "synonyms": [
            "big,large"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "my_target": {
        "type": "text"
      },
      "my_alias": {
        "type": "alias",
        "path": "my_target"
      }
    }
  }
}

# Add a document
POST /alias.synonyms/_doc/1
{"my_target":"this sentence has big in it"}
GET /alias.synonyms/_doc/1

# (Search #1) Search for existing synonym word in text field (gets hit)
GET /alias.synonyms/_search
{
  "explain": true,
  "query": {
    "match": {
      "my_target": "big"
    }
  }
}

# (Search #2) Search for non-existing synonym word in text field (gets hit)
GET /alias.synonyms/_search
{
  "explain": true,
  "query": {
    "match": {
      "my_target": "large"
    }
  }
}

# (Search #3) Search for existing non-synonym word in text field (gets hit)
GET /alias.synonyms/_search
{
  "explain": true,
  "query": {
    "match": {
      "my_target": "sentence"
    }
  }
}

# (Search #4) Search for existing synonym word in alias field (no hit, but one was expected)
GET /alias.synonyms/_search
{
  "explain": true,
  "query": {
    "match": {
      "my_alias": "big"
    }
  }
}

# (Search #5) Search for non-existing synonym word in alias field (no hit, but one was expected)
GET /alias.synonyms/_search
{
  "explain": true,
  "query": {
    "match": {
      "my_alias": "large"
    }
  }
}

# (Search #6) Search for existing non-synonym word in alias field (gets hit)
GET /alias.synonyms/_search
{
  "explain": true,
  "query": {
    "match": {
      "my_alias": "sentence"
    }
  }
}

Странно для меня то, что это не просто синоним, который не существует в поле, которое не работает (поиск # 5); поиск «большой» в поле псевдонима также не работает, даже если слово явно указано в документе (поиск № 4).

Выполнение тех же команд, что и выше, но пропуская фильтр синонимов в настройках индекса, возвращает результаты поиска «предложение» (поиск № 3 и № 6) и «большой» (поиск № 1 и № 4) в обоих полях, но не "большой" (поиск # 2 и # 5), как ожидалось.

Что-то не так с вышеуказанной настройкой? Или Elasticsearch просто не оборудован для обработки запросов псевдонимов данных с помощью анализатора синонимов?

В настоящее время используется Elasticsearch 7.0.

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