gpt4 book ai didi

elasticsearch - 如何通过 Elasticsearch 来搜索其中包含 “-”破折号的值

转载 作者:行者123 更新时间:2023-12-02 22:51:32 25 4
gpt4 key购买 nike

我在 flex 搜索中的输入是这样的:

输入:

curl -XPUT "http://localhost:9200/movies/movie/4" -d'
{
"uid": "a-b"
}'

查询:
curl -XGET "http://localhost:9200/movies/movie/_search" -d '
{
"query" : {
"term" : { "uid": "a-b" }
}
}'

输出:
{"took":2,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}

谢谢

最佳答案

这完全取决于您使用的分析仪。

使用标准分析器,您可以看到已经生成了两个 token ,并且忽略了“-”。

curl -XGET 'localhost:9200/myindex/_analyze?analyzer=standard&pretty' -d 'a-b'
{
"tokens" : [ {
"token" : "a",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "b",
"start_offset" : 2,
"end_offset" : 3,
"type" : "<ALPHANUM>",
"position" : 2
} ]
}

在空白分析器中,“-”被视为数据,您只能为数据获取一个 token :
curl -XGET 'localhost:9200/myindex/_analyze?analyzer=whitespace&pretty' -d 'a-b'
{
"tokens" : [ {
"token" : "a-b",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 1
} ]
}

当您使用 术语查询时,不会对搜索查询进行任何分析。
因此,您可能正在尝试将“a-b”与“a”和“b”进行匹配(假设您在映射中使用了标准分析器)-即,它将不匹配并且不会返回结果。

如果您在查询中使用了 匹配 query_string ,则您的搜索可能会起作用,因为将对搜索字符串进行分析。
也就是说,ES会尝试将“a”和“b”与包含“a”和“b”的字段进行匹配-这将是成功的匹配。

关于elasticsearch - 如何通过 Elasticsearch 来搜索其中包含 “-”破折号的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27443513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com