利用弹性搜索dsl python分析api

2024-10-04 09:29:34 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在弹性搜索dsl-python中使用default\u-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).)*"是如何被分解成术语的?实际上,'!'似乎不能作为regex工作。如果默认分析器无法将'!'作为regexp字符,如何更改analyzer?在

我是一个新手,发现在我的代码中准确地使用analyze方法有点困难。请帮忙。在


Tags: nameobjdefaultfieldsearchindextypequery
1条回答
网友
1楼 · 发布于 2024-10-04 09:29:34

我不知道你到底想达到什么目的。如果您发布了一个CURL查询,它可以让您更容易地将其转换为Elasticsearch DSl或Elasticsearch py接口。在

如果您正在寻找_analyze方法的替代方法,但是在Python中,您可以使用elasticsearch py来实现它,但是我不确定您是否可以使用elasticsearch DSL实现它。假设我想看看我的字符串jestem biały miś是如何使用我的分析器morfologik来分析的。使用CURL,我只需运行:

$ 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
    }
  ]
}

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

^{pr2}$

analyze方法的输出与上述CURL请求的输出相同:

{'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}]}

相关问题 更多 >