利用弹性搜索dsl python分析api

时间:2018-08-10 01:01:04

标签: python regex elasticsearch elasticsearch-dsl elasticsearch-dsl-py

如何在弹性搜索dsl python中使用默认的_analyze?

我的查询如下:

query = Q('regexp', field_name = "f04((?!z).)*")
search_obj = Search(using = conn, index = index_name, doc_type = type_name).query(query)
response = search_obj[0:count].execute()

我将analyze() method放在哪里,以便查看"f04((?!z).)*"的术语如何?实际上,看来'!'不能用作正则表达式。如果默认分析器无法将'!'用作正则表达式字符,该如何更改分析仪?

我是一个新手,几乎没有发现很难准确地将分析方法放入我的代码中。请帮助。

1 个答案:

答案 0 :(得分:0)

我不确定您要实现什么目标。如果发布的CURL查询满足您的要求,则可以更轻松地将其转换为Elasticsearch DSl或elasticsearch-py接口。

如果您正在寻找ct = ct.melt(id_vars=['period', 'gender']) g = sns.catplot(x="period", y="value", hue="variable", col='gender', data=ct, kind="bar", height=4, aspect=2); 方法的替代方法,但是在Python中,您可以使用elasticsearch-py实现它,但是我不确定您可以使用Elasticsearch DSL来实现。因此,假设我想查看如何使用名为_analyze的分析器分析字符串jestem biały miś的结果。使用CURL我将运行:

morfologik

为了使用elasticsearch-py获得相同的结果,您可以运行以下命令:

$ curl -XGET "http://localhost:9200/morf_texts/_analyze" -H 'Content-Type: application/json' -d'
{
  "analyzer": "morfologik",
  "text": "jestem biały miś"
}'

{
  "tokens": [
    {
      "token": "być",
      "start_offset": 0,
      "end_offset": 6,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "biały",
      "start_offset": 7,
      "end_offset": 12,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "miś",
      "start_offset": 13,
      "end_offset": 16,
      "type": "<ALPHANUM>",
      "position": 2
    },
    {
      "token": "misić",
      "start_offset": 13,
      "end_offset": 16,
      "type": "<ALPHANUM>",
      "position": 2
    }
  ]
}

from elasticsearch import Elasticsearch from elasticsearch.client import IndicesClient client = Elasticsearch() indices_client = IndicesClient(client) indices_client.analyze( body={ "analyzer": "morfologik", "text": "jestem biały miś", } ) 方法的输出与上述CURL请求的输出相同:

analyze