我有一个具有以下配置的ElasticSearch索引:
{
"my_ind": {
"settings": {
"index": {
"mapping": {
"total_fields": {
"limit": "10000000"
}
},
"number_of_shards": "3",
"provided_name": "my_ind",
"creation_date": "1539773409246",
"analysis": {
"analyzer": {
"default": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "whitespace"
}
}
},
"number_of_replicas": "1",
"uuid": "3wC7i-E_Q9mSDjnTN2gxrg",
"version": {
"created": "5061299"
}
}
}
}
}
我想通过普通搜索来搜索以下内容:
DL-1234170386456
此内容在以下字段中可用:
DNumber
此字段的映射如下:
{
"DNumber": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
我正在尝试用JAVA语言实现它。我遇到了ElasticSearch分析器和令牌生成器,因此我使用了“ 空白”令牌生成器。
我正在尝试使用以下查询进行搜索:
{
"query": {
"multi_match": {
"query": "DL-1234170386456",
"fields": [
"_all"
],
"type": "best_fields",
"operator": "OR",
"analyzer": "default",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"lenient": false,
"zero_terms_query": "NONE",
"boost": 1
}
}
}
我在做什么错?
答案 0 :(得分:0)
经过大量研究和反复试验,找出了答案!
一些基本但重要的要点:
实际问题:
ElasticSearch将字符串(“ DL-1234170386456”)分为两个不同的部分,例如“ DL”和“ 1234170386456”。
解决方案: