我使用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中激活搜索。
答案 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')