gpt4 book ai didi

elasticsearch - 从 Elasticsearch 中的 CamelCase 分词器中排除

转载 作者:行者123 更新时间:2023-11-29 02:48:08 25 4
gpt4 key购买 nike

在 Elasticsearch 中搜索 iphone 时努力使 iPhone 匹配。

因为我有一些源代码处于危险之中,所以我肯定需要 CamelCase tokenizer , 但它似乎将 iPhone 分成两个术语,因此无法找到 iphone。

任何人都知道添加异常(exception)以将驼峰式单词分解为标记(驼峰式 + 大小写)的方法吗?

更新:为了清楚起见,我希望 NullPointerException 被标记为 [null, pointer, exception],但我不希望 iPhone 变成 [i, phone]。

还有其他解决方案吗?

更新 2:@ChintanShah 的回答提出了一种不同的方法,它给了我们更多——NullPointerException 将被标记为 [null, pointer, exception, nullpointer, pointerexception, nullpointerexception],从搜索的那个。而且索引也更快!付出的代价是索引大小,但它是一个更好的解决方案。

最佳答案

您可以使用 word_delimiter token filter 实现您的要求.这是我的设置

{
"settings": {
"analysis": {
"analyzer": {
"camel_analyzer": {
"tokenizer": "whitespace",
"filter": [
"camel_filter",
"lowercase",
"asciifolding"
]
}
},
"filter": {
"camel_filter": {
"type": "word_delimiter",
"generate_number_parts": false,
"stem_english_possessive": false,
"split_on_numerics": false,
"protected_words": [
"iPhone",
"WiFi"
]
}
}
}
},
"mappings": {
}
}

这将在大小写更改 上拆分单词,因此 NullPointerException 将被标记为 nullpointer 和 < em>异常(exception),但 iPhoneWiFi 将保持原样,因为它们受到保护word_delimiter 有很多灵活的选项。您还可以preserve_original,这对您有很大帮助。

GET logs_index/_analyze?text=iPhone&analyzer=camel_analyzer

结果

{
"tokens": [
{
"token": "iphone",
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 1
}
]
}

现在用

GET logs_index/_analyze?text=NullPointerException&analyzer=camel_analyzer

结果

{
"tokens": [
{
"token": "null",
"start_offset": 0,
"end_offset": 4,
"type": "word",
"position": 1
},
{
"token": "pointer",
"start_offset": 4,
"end_offset": 11,
"type": "word",
"position": 2
},
{
"token": "exception",
"start_offset": 11,
"end_offset": 20,
"type": "word",
"position": 3
}
]
}

另一种方法是使用不同的分析器对您的领域进行两次分析,但我觉得 word_delimiter 可以解决问题。

这有帮助吗?

关于elasticsearch - 从 Elasticsearch 中的 CamelCase 分词器中排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567244/

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