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
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标记过滤器。请阅读,它非常好,有很多示例。查询字符串显示的结果与匹配结果相同。我需要添加更多的过滤器或映射吗