我正在使用 query_string 进行搜索。搜索工作正常,但它让所有带有小写字母和大写字母的记录都匹配。但我想精确匹配区分大小写?例如: 搜索字段:“title” 当前输出:
- 标题
- 标题
- 标题,
我只想先(标题)。如何解决这个问题。
我在java中的代码:
QueryBuilder qbString=null;
qbString=QueryBuilders.queryString("title").field("field_name");
我正在使用 query_string 进行搜索。搜索工作正常,但它让所有带有小写字母和大写字母的记录都匹配。但我想精确匹配区分大小写?例如: 搜索字段:“title” 当前输出:
我只想先(标题)。如何解决这个问题。
我在java中的代码:
QueryBuilder qbString=null;
qbString=QueryBuilders.queryString("title").field("field_name");
您需要配置映射/文本处理,以便标记索引而不小写。
“标准”分析器小写(并删除停用词)。
这是一个示例,显示如何配置分析器和映射以实现此目的:https ://www.found.no/play/gist/7464654
在 ElasticSearch 上的版本 5 + 中没有已分析和未分析索引的概念,它由类型驱动!
不推荐使用字符串数据类型并用文本和关键字替换,因此如果您的数据类型是文本,它将表现得像字符串并且可以被分析和标记化。
但是如果数据类型被定义为关键字,那么它会自动不被分析,并返回完全精确匹配。
因此,当您想要与区分大小写进行完全匹配时,您应该记住将类型标记为关键字。
下面的代码示例用于使用此定义创建索引:
PUT testindex
{
"mappings": {
"original": {
"properties": {
"@timestamp": {
"type": "date"
},
"@version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"APPLICATION": {
"type": "text",
"fields": {
"exact": {"type": "keyword"}
}
},
"type": {
"type": "text",
"fields": {
"exact": {"type": "keyword"}
}
}
}
}
}
}