在弹性搜索中逐字搜索

时间:2016-05-25 12:17:05

标签: python elasticsearch

我使用elasticsearch和python作为客户端。我想通过公司列表查询。说 公司 字段值为

Gokl 
Normn 
Nerth

场景1(使用elasticsearch-dsl python)

s = Search(using=client, index="index-test") \
.query("match", Company="N") 

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

场景2(使用elasticsearch-dsl python)

s = Search(using=client, index="index-test") \
.query("match", Company="Normn") 

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

3 个答案:

答案 0 :(得分:0)

我认为您正在寻找前缀搜索。我不知道python语法,但直接查询看起来像这样:

GET index-test/_search
{
  "query": {
    "prefix": {
      "company": {
        "value": "N"
      }
    }
  }
}

有关详细信息,请参阅here

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

请从here

中读取查询类型

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

s = Search(using=client, index="index-test").\
.query("match_phrase_prefix", Company="N")

您可以对公司和另一个字段使用多重匹配查询,例如:

s = Search(using=client, index="index-test").\
.query("multi_match", query="N", fields=['Company','Another_field'],type='phrase_prefix')