Запрос на основе строки Elasticsearch для соответствия регулярному выражению - PullRequest
0 голосов
/ 22 января 2019

Я хотел бы знать, возможно ли сделать запрос на основе строки, чтобы соответствовать регулярному выражению вasticsearch.

Я знаю, что это возможно наоборот (сделать запрос регулярного выражения для сопоставления строки в документеasticsearch), но могу ли я сделать запрос на основе строки и сопоставить регулярное выражение, сохраненное в документе, сasticsearch?

Например, у меня есть документ, заполненный данными, включая ввод (регулярное выражение) и вывод (описывающий регулярное выражение), как показано ниже:

{
  "input": "[0-9]+ ?kg",
  "output": "weight"
}

Могу ли я сделать запрос со строкой "67 кг", чтобы соответствовать регулярному выражению и получить это:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test1",
        "_type" : "type",
        "_id" : "XqXucGgBXOzlaMdqiLcI",
        "_score" : 1.0,
        "_source" : {
          "input" : "[0-9]+ ?kg",
          "output" : "weight"
        }
      }
    ]
  }
}

1 Ответ

0 голосов
/ 22 января 2019

Этого можно добиться с помощью функции Percolate Query .

По сути, идея заключается в следующем: ваши документы являются запросами, и вы можете выполнить поиск по ним вместе с вашими документами, чтобы увидеть, будут ли эти документы сопоставлены.

Вам необходимо создать индекс со специальным типом поля - percolator. Например,

PUT /my-index
{
    "mappings": {
        "_doc": {
            "properties": {
                "input": {
                    "type": "keyword"
                },
                "query": {
                    "type": "percolator"
                }
            }
        }
    }
}

После этого добавьте документ (это будет запрос, который будет соответствовать вашему полю input с регулярным выражением)

Например,

PUT /my-index/_doc/1
{
    "query" : {
        "regexp" : {
            "input" : "[0-9]+( kg)?"
        }
    }
}

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

После этого проверьте, как ваши документы снова сопоставляются с каким запросом, выполнив следующее:

GET /my-index/_search
{
    "query" : {
        "percolate" : {
            "field" : "query",
            "document" : {
                "input" : "67 kg"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...