elasticsearch - Elasticsearch-将符号视为常规字符串并使文本不区分大小写

标签 elasticsearch whitespace tokenize case-sensitive analyzer

我有一个像这样的 flex 查询:

return {
    url: API,
    data: {
        query: {
            bool: {
                must: [{
                    function_score: {
                        query: {
                            multi_match: {
                                query: "1234-ASDasdfasdf",
                                // analyzer: "whitespace",
                                type: "best_fields",
                                fuzziness: "1",
                            }
                        }
                    }
                }
                    // filters are pushed into here
                ]
            }
        }
    }
}
我们的业务数据涉及破折号,而我发现空白分析器最有效地避免破折号并将其视为常规字符串。
但是,空白分析器弄乱了不区分大小写的搜索。
我还没有找到一种允许不区分大小写并忽略符号的解决方案。使用默认的分析器,我认为所有符号都被视为标记器。因此,输入类似1-2-3-4的内容实际上会搜索[1,2,3,4]。
是否存在不区分大小写且对空格进行标记化的解决方案(或者至少不对符号进行标记化)?

最佳答案

您走在正确的轨道上。
如果空格 token 生成器适合您,但问题不区分大小写,则可以添加lowercase token filter Refer an example with whitespace tokenizer and lowercase filter - custom analyzer

curl -X PUT "localhost:9200/lowercase_example?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "analysis": {
      "analyzer": {
        "whitespace_lowercase": {
          "tokenizer": "whitespace",
          "filter": [ "lowercase" ]
        }
      }
    }
  }
}
'
当您需要更改数据映射时,请不要忘记为数据重新编制索引。

关于elasticsearch - Elasticsearch-将符号视为常规字符串并使文本不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63421673/

相关文章:

elasticsearch - 在 Elasticsearch 中使用 'OR' 或 'AND' 组合多个查询

elasticsearch - 如何跨嵌套文档汇总文档?

html - CSS:什么时候删除空的匿名 block 框?

Java字符串标记化: Split on pattern and retain pattern

php - 单词之间没有空格的语言中的断字(例如,亚洲语言)?

elasticsearch - ElasticSearch应该查询

elasticsearch - 有没有办法在服务已经安装后以编程方式修改 elasticsearch 服务启动 Java 选项 (Windows)?

whitespace - 如何获得补丁以忽略回车符?

javascript - 如何: write nice HTML code and Javascript console

c - C 中的智能分词器