Есть задача сохранять в индексе синонимы для словосочетаний.
Пример:
жидкость омывателя -> омывайка
монопод для селфи, палка для селфи -> селфипалка
Настроил анализатор следующим образом:
PUT /multiwords_synonyms_index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": {
          "type": "synonym",
          "synonyms": [
            "монопод для селфи, палка для селфи=>селфипалка"
          ]
        }
      },
      "analyzer": {
        "my_synonyms": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_synonym_filter"
          ]
        }
      }
    }
  }
}
Фильтр отрабатывает, заменяя словосочетания на указанный в таблице терм:
POST /multiwords_synonyms_index/_analyze?analyzer=my_synonyms
{
  "text": "у меня есть монопод для селфи" 
}
POST /multiwords_synonyms_index/_analyze?analyzer=my_synonyms
{
  "text": "у меня есть селфипалка" 
}
{
   "tokens": [
      {
         "token": "text",
         "start_offset": 5,
         "end_offset": 9,
         "type": "<ALPHANUM>",
         "position": 1
      },
      {
         "token": "у",
         "start_offset": 22,
         "end_offset": 23,
         "type": "<ALPHANUM>",
         "position": 4
      },
      {
         "token": "меня",
         "start_offset": 24,
         "end_offset": 28,
         "type": "<ALPHANUM>",
         "position": 5
      },
      {
         "token": "есть",
         "start_offset": 29,
         "end_offset": 33,
         "type": "<ALPHANUM>",
         "position": 6
      },
      {
         "token": "селфипалка",
         "start_offset": 34,
         "end_offset": 51,
         "type": "SYNONYM",
         "position": 7
      }
   ]
Таким образом, я могу найти все нужные документы по запросу "селфипалка", но по запросу "монопод для селфи" документ найден не будет.
Использую такой запрос:
GET /multiwords_synonyms_index/data/_search
{
   "from": 0,
   "size": 10,
   "query": {
      "filtered": {
         "query": {
            "function_score": {
               "query": {
                  "simple_query_string": {
                     "query": "монопод для селфи",
                     "fields": [
                        "name"
                     ],
                     "default_operator": "or",
                     "analyzer": "my_synonyms",
                     "minimum_should_match": "1"
                  }
               }
            }
         }
      }
   }
}
Как можно решить эту задачу? Может быть, есть возможность сохранять исходные термы, или обязательно использовать match_phrase?