我正在寻找一个词,比如“修正”,它可能在数据中以“修正”、“修正”甚至“*修正”的形式出现。搜索此类单词的最佳方法是什么?我知道通配符可以实现这一点,但由于我的其他代码部分,我被限制不使用它。有哪些不同的方式可以提供更好的搜索性能?
我正在使用自定义 NGRAM 分析器,它有一个 ngram 分词器。我还使用了小写过滤器。该查询对于没有字符的搜索运行良好。但是当我搜索某些符号时,它失败了。由于我使用了小写分词器,Elasticsearch 不会分析符号。我知道空格标记器可以帮助我解决这个问题。如何在单个分析器中使用两个分词器?下面是映射:
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer":"my_tokenizer",
"filter":"lowercase"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有办法解决这个问题吗?