Как обрабатывать фразу из одинаковых слов?

Реализовать можно и просто двумя запросами конечно...

Да, я думаю проще одним запросом но по двум полям:

DELETE test
PUT test
{
  "settings": {
    "analysis": {
      "char_filter": {
        "replace_dash_char_filter": {
          "type": "mapping",
          "mappings": [
            "- => _"
          ]
        }
      },
      "analyzer": {
        "my_analyzer": {
          "char_filter": [
            "replace_dash_char_filter"
          ],
          "tokenizer": "standard",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "message": {
          "type": "text",
          "analyzer": "my_analyzer",
          "fields": {
            "standard": {
              "type": "text",
              "search_analyzer": "my_analyzer", 
              "analyzer": "standard"
            }
          }
        }
      }
    }
  }
}

PUT test/doc/_bulk?refresh
{"index":{"_id":1}}
{"message" : "клен-дуб и грибы"}
{"index":{"_id":2}}
{"message" : "Клен или дуб, вот в чем вопрос"}
{"index":{"_id":3}}
{"message" : "Стоит дуб-дубом, ничего не отвечает"}
{"index":{"_id":4}}
{"message" : "Дуб-дуб это вам не клен и дуб"}

GET test/doc/_search
{
  "query": {
    "multi_match": {
      "query": "клен-дуб",
      "fields": ["message^2", "message.standard"]
    }
  }
}

GET test/doc/_search?explain
{
  "query": {
    "multi_match": {
      "query": "клен",
      "fields": ["message^2", "message.standard"]
    }
  }
}
1 Like