gpt4 book ai didi

elasticsearch - 如何优化Elasticsearch的全文搜索以匹配 'C++'之类的字符串

转载 作者:行者123 更新时间:2023-12-02 23:47:39 25 4
gpt4 key购买 nike

我们有一个文本内容搜索引擎,其中包含诸如c++c#之类的字符串。切换到Elasticsearch已显示搜索与'c++'等词不匹配。 ++已删除。

我们如何教导elasticsearch在全文搜索中正确匹配而不删除特殊字符?当然,像逗号,这样的字符仍应删除。

最佳答案

您需要创建自己的custom-analyzer并根据您的要求生成 token ,对于您的示例,我创建了一个以下自定义分析器,其文本字段名称为language并为一些示例文档建立了索引:

使用自定义分析器创建索引

{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "whitespace",
"char_filter": [
"replace_comma"
]
}
},
"char_filter": {
"replace_comma": {
"type": "mapping",
"mappings": [
", => \\u0020"
]
}
}
}
},
"mappings": {
"properties": {
"language": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}

为诸如 c++c#c,java之类的文本生成的 token 。

POST http:// {{hostname}}:{{port}} / {{index}} / _analyze
{
"text" : "c#",
"analyzer": "my_analyzer"
}

{
"tokens": [
{
"token": "c#",
"start_offset": 0,
"end_offset": 2,
"type": "word",
"position": 0
}
]
}

对于 c,java,它生成了2个单独的 token cjava,因为它将 ,替换为以下所示的空格:
{
"text" : "c, java",
"analyzer":"my_analyzer"
}

{
"tokens": [
{
"token": "c",
"start_offset": 0,
"end_offset": 1,
"type": "word",
"position": 0
},
{
"token": "java",
"start_offset": 3,
"end_offset": 7,
"type": "word",
"position": 1
}
]
}

注意:您需要了解 analysis process并相应地修改自定义分析器,以使其适用于所有用例。我的示例可能不适用于所有边缘用例,但是希望您对如何处理此类要求有所了解。

关于elasticsearch - 如何优化Elasticsearch的全文搜索以匹配 'C++'之类的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59932904/

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