gpt4 book ai didi

elasticsearch - Elasticsearch匹配与过滤条件

转载 作者:行者123 更新时间:2023-12-02 22:54:11 24 4
gpt4 key购买 nike

我在过滤条件中没有发现term和match之间有任何区别:

POST /admin/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"partnumber": "j1knd"
}
}
]
}
}
}

结果也包含不完全匹配的零件号,例如:“52527.J1KND-H”

为什么?

最佳答案

不会分析术语查询,这意味着将使用您发送的任何内容来匹配倒排索引中的标记,同时分析匹配查询并将相同的分析器应用于字段,该字段在索引时间使用并因此与文档匹配。

阅读有关term querymatch query的更多信息。如匹配查询中所述:

Returns documents that match a provided text, number, date or boolean value. The provided text is analyzed before matching.



您还可以使用 analyze API查看为特定字段生成的 token 。
standard analyzer52527.J1KND-H文本上生成的 token 。
POST /_analyze
{
"text": "52527.J1KND-H",
"analyzer" : "standard"
}

{
"tokens": [
{
"token": "52527",
"start_offset": 0,
"end_offset": 5,
"type": "<NUM>",
"position": 0
},
{
"token": "j1knd",
"start_offset": 6,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "h",
"start_offset": 12,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 2
}
]
}

上面向您解释了为什么也会得到不完全匹配的 partnumbers,例如:“52527.J1KND-H”,我将以您的示例为例,以及如何使它工作。

索引映射
{
"mappings": {
"properties": {
"partnumber": {
"type": "text",
"fields": {
"raw": {
"type": "keyword" --> note this
}
}
}
}
}
}

索引文件
{
"partnumber" : "j1knd"
}

{
"partnumber" : "52527.J1KND-H"
}

搜索查询仅返回完全匹配
{
"query": {
"bool": {
"filter": [
{
"term": {
"partnumber.raw": "j1knd" --> note `.raw` in field
}
}
]
}
}

结果
 "hits": [
{
"_index": "so_match_term",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"partnumber": "j1knd"
}
}
]

}

关于elasticsearch - Elasticsearch匹配与过滤条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60867242/

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