gpt4 book ai didi

elasticsearch - 使用 elasticsearch 搜索特殊字符

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

我只是对 Elasticsearch 有问题,我有一些需要使用特殊字符进行搜索的业务需求。例如,某些查询字符串可能包含(空格、@、&、^、()、!)我在下面有一些类似的用例。

  1. foo&bar123(完全匹配)
  2. foo & bar123(单词之间的空格)
  3. foobar123(无特殊字符)
  4. foobar 123(没有带空格的特殊字符)
  5. foo bar 123(单词之间没有带有空格的特殊字符)
  6. FOO&BAR123(大写)

所有这些都应该匹配相同的结果,有人可以帮我解决这个问题吗?请注意,现在我可以完美地搜索其他没有特殊字符的字符串

{
"settings": {
"number_of_shards": 1,
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "custom_tokenizer"
}
},
"tokenizer": {
"custom_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 30,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"index": {
"properties": {
"some_field": {
"type": "text",
"analyzer": "autocomplete"
},
"some_field_2": {
"type": "text",
"analyzer": "autocomplete"
}
}
}
}
}

最佳答案

编辑:

这里有两件事要检查:

(1)我们索引文档时是否正在分析特殊字符?

_analyze API 告诉我们没有:

POST localhost:9200/index-name/_analyze
{
"analyzer": "autocomplete",
"text": "foo&bar"
}

// returns
fo, foo, foob, fooba, foobar, oo, oob, // ...etc: the & has been ignored

这是因为映射中的“token_chars”:“letter”、“digit”。这两组不包括诸如“&”之类的标点符号。因此,当您将“foo&bar”上传到索引时,实际上会忽略 &。

要在索引中包含 &,您需要在“token_chars”列表中包含“标点符号”。对于其他一些字符,您可能还需要“符号”组...:

"tokenizer": {
"custom_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 30,
"token_chars": [
"letter",
"digit",
"symbol",
"punctuation"
]
}
}

现在我们看到了正在适当分析的术语:

POST localhost:9200/index-name/_analyze
{
"analyzer": "autocomplete",
"text": "foo&bar"
}

// returns
fo, foo, foo&, foo&b, foo&ba, foo&bar, oo, oo&, // ...etc

(2) 我的搜索查询是否符合我的预期?

现在我们知道 'foo&bar' 文档正在被正确索引(分析),我们需要检查搜索是否返回了结果。以下查询有效:

POST localhost:9200/index-name/_doc/_search
{
"query": {
"match": { "some_field": "foo&bar" }
}
}

与 GET 查询一样 http://localhost:9200/index-name/_search?q=foo%26bar

根据 the docs 的其他查询可能会有意想不到的结果,您可能希望将您的 search_analyzer 声明为不同于您的索引分析器(例如 ngram 索引分析器和标准搜索分析器)......但这取决于您

关于elasticsearch - 使用 elasticsearch 搜索特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51785404/

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