gpt4 book ai didi

elasticsearch - ElasticSearch中的半完全(完全)匹配

转载 作者:行者123 更新时间:2023-12-02 23:38:06 27 4
gpt4 key购买 nike

有没有办法在ElasticSearch中要求完整(尽管不一定精确)匹配?

例如,如果一个字段具有术语"I am a little teapot short and stout",我想匹配" i am a LITTLE TeaPot short and stout! ",而不仅仅是"teapot short and stout"。我已经尝试过过滤器一词,但这需要实际的完全匹配。

最佳答案

如果您的“不一定精确”定义是指大写/小写字母组合和标点符号(例如示例中的!),那么这将是一个解决方案,不是太简单,也很难做到:

映射:

{
"settings": {
"analysis": {
"analyzer": {
"my_keyword_lowercase": {
"tokenizer": "keyword",
"filter": [
"lowercase",
"trim",
"my_pattern_replace"
]
}
},
"filter": {
"my_pattern_replace": {
"type": "pattern_replace",
"pattern": "!",
"replacement":""
}
}
}
},
"mappings": {
"test": {
"properties": {
"text": {
"type": "string",
"analyzer": "my_keyword_lowercase"
}
}
}
}
}

这里的想法如下:
  • 使用keyword标记生成器将文本保持原样,并且不将其拆分为标记
  • 使用lowercase过滤器来消除混合的大写/小写字符
  • trim过滤器,用于摆脱尾随和前导空格
  • 使用pattern_replace过滤器来摆脱标点符号。之所以这样,是因为keyword标记化程序不会对文本中的字符执行任何操作。 standard分析器将执行此操作,但是standard也将拆分文本,而您需要像
  • 一样

    这是 您将在上面的映射中使用的查询:
    {
    "query": {
    "match": {
    "text": " i am a LITTLE TeaPot short and stout! "
    }
    }
    }

    关于elasticsearch - ElasticSearch中的半完全(完全)匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871972/

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