Slash не работает при сопоставлении запроса с использованием регулярных выражений в Elasticsearch - PullRequest
0 голосов
/ 03 марта 2019

В официальной документации Elasticsearch написано Any reserved character can be escaped with a backslash "\*" including a literal backslash character: "\\".

Можете ли вы объяснить, почему такой запрос

{
                    "query": {
                        "bool": {
                            "must": [
                                {
                                    "regexp": {
                                        "path": ".*test\/test.txt.*"
                                    }
                                },
                                {
                                    "match": {
                                        "user_id": 1
                                    }
                                }
                            ]
                        }
                    }
                }

не находит индекс какэто

{
                "_index": "pictures",
                "_type": "picture",
                "_id": "wiskQ2kBi923Omj4U",
                "_score": 1,
                "_source": {
                    "user_id": 1,
                    "tag": [],
                    "text": "some text",
                    "path": "test/test.txt"
                }
            }

1 Ответ

0 голосов
/ 03 марта 2019

Поскольку поле path анализируется, регулярное выражение не будет ему соответствовать.Причина в том, что test/test.txt получают токены в двух разных терминах: test и test.txt.Поскольку path имеет подполе keyword типа данных keyword, которое будет индексировать test/test.txt как есть, вам следует выполнить запрос к этому полю, то есть path.keyword.

Используйте запрос ниже:

{
  "query": {
    "bool": {
      "must": [
        {
          "regexp": {
            "path.keyword": ".*test/test.txt.*"
          }
        },
        {
          "match": {
            "user_id": 1
          }
        }
      ]
    }
  }
}
...