elasticsearch,Python,elasticsearch" /> elasticsearch,Python,elasticsearch" />

Python 弹性搜索中的逐字搜索

Python 弹性搜索中的逐字搜索,python,elasticsearch,Python,elasticsearch,我使用elasticsearch和python作为客户端。我想查询一下公司的名单。假设公司字段值为 Gokl Normn Nerth 场景1(使用elasticsearch dsl python) 所以当我在查询匹配中输入N时,我不会得到Normn或Nerth。我认为这可能是因为基于单词的标记化 场景2(使用elasticsearch dsl python) 当我输入Normn时,我清楚地得到了输出。那么,当我在上面的场景1中输入字母n时,如何激活搜索。我想您正在寻找前缀搜索。我不知道py

我使用elasticsearch和python作为客户端。我想查询一下公司的名单。假设公司字段值为

Gokl 
Normn 
Nerth
场景1(使用elasticsearch dsl python)

所以当我在查询匹配中输入N时,我不会得到Normn或Nerth。我认为这可能是因为基于单词的标记化

场景2(使用elasticsearch dsl python)


当我输入Normn时,我清楚地得到了输出。那么,当我在上面的场景1中输入字母n时,如何激活搜索。

我想您正在寻找前缀搜索。我不知道python语法,但直接查询如下所示:

GET index-test/_search
{
  "query": {
    "prefix": {
      "company": {
        "value": "N"
      }
    }
  }
}
s = Search(using=client, index="index-test").\
.query("multi_match", query="N", fields=['Company','Another_field'],type='phrase_prefix')

有关更多信息,请参阅。

如果我理解正确,您需要查询以特定字母开头的公司

在这种情况下,您可以使用此查询

{
  "query": {
    "regexp": {
      "Company": "n.*"
    }
  }
}

请从中读取查询类型

对于这种情况,您可以使用以下代码:

s = Search(using=client, index="index-test").\
.query("match_phrase_prefix", Company="N")
您可以对公司和其他字段使用多匹配查询,如下所示:

GET index-test/_search
{
  "query": {
    "prefix": {
      "company": {
        "value": "N"
      }
    }
  }
}
s = Search(using=client, index="index-test").\
.query("multi_match", query="N", fields=['Company','Another_field'],type='phrase_prefix')

请尝试改用
query\u string
,因为
match
只对完整的索引标记有效,而不是它的一部分。更详细的方法是在索引时使用Edengram标记过滤器。请阅读,它非常好,有很多示例。查询字符串显示的结果与匹配结果相同。我需要添加更多的过滤器或映射吗