我在Elasticsearch中搜索时遇到问题,希望能对您有所帮助。
我想找到一个关键字标记化的文档,索引中的分析器仅将其小写。当生成的术语是搜索查询的一部分时,我希望Elasticsearch能够找到它。
示例搜索:
"query": {
"match": {
"categoryNames": "CD&DVD Aufbewahrung schwarz"
}
}
我要查找的文档:
"_source": {
"categoryId": 11972638,
"categoryNames": [
"DVD-Koffer",
"CD-Koffer",
"CD-Aufbewahrung",
"DVD-Aufbwahrung",
"DVD-Ordner",
"EDV-DVD-Aufbewahrung",
"EDV-CD-Aufbewahrung",
"CD&DVD Aufbewahrung",
"Multimediabox"
],
"lvl3Id": 11972638
}
索引分析器:
"analysis" : {
"analyzer" : {
"default" : {
"type": "custom",
"tokenizer": "keyword",
"filter" : ["lowercase"]
}
}
}
我要查找的文档的术语 vector :
"cd&dvd aufbewahrung": {
"term_freq": 1,
"tokens": [
...
]
},
"cd-aufbewahrung": {
"term_freq": 1,
"tokens": [
...
]
},
"cd-koffer": {
"term_freq": 1,
"tokens": [
...
]
},
....
我没有结果当我仅搜索“CD&DVD aufbewahrung”时,我找到了文档。
我认为elasticsearch试图找到一个不存在的术语“CD&DVD Aufbewahrung schwarz”,而不是匹配“CD&DVD Aufbewahrung”而忽略“schwarz”。
搜索不能使用标准分析器,因为重要的是只有“CD&DVD Aufbewahrung”才能找到“CD&DVD Aufbewahrung”,而不是仅包含“Aufbewahrung”或“Aufbewahrung CD&DVD”的字词,在分析该字词时会找到该字词通过例如空格。
以下示例符合我对上述文档的期望:
CD&DVD Aufbewahrung -> Found
CD&DVD aufbewahrung -> Found
schwarz CD&DVD Aufbewahrung -> Found
CD&DVD Aufbewahrung gelb -> Found
schwarz CD&DVD Aufbewahrung gelb -> Found
CD&DVD schwarz Aufbewahrung -> not Found
Aufbewahrung CD&DVD -> not Found
schwarz CD & DVD Aufbewahrung -> not Found
schwarzCD&DVD Aufbewahrung -> Not Found
有谁知道如何解决这个问题?
最佳答案
也许使用带有Shingle Token Filter的自定义分析器在这里会有所帮助。请参见下面的代码:
制图
PUT /so53412408
{
"settings": {
"analysis": {
"analyzer": {
"lowercase_keyword": {
"tokenizer": "keyword",
"filter": [
"lowercase"
]
},
"lowercase_shingle": {
"tokenizer": "whitespace",
"filter": [
"lowercase",
"my_shingle"
]
}
},
"filter": {
"my_shingle": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 4
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"categoryNames": {
"type": "text",
"analyzer": "lowercase_keyword",
"search_analyzer": "lowercase_shingle"
}
}
}
}
}
样本数据
POST /so53412408/_doc
{
"categoryNames": [
"DVD-Koffer",
"CD-Koffer",
"CD-Aufbewahrung",
"DVD-Aufbwahrung",
"DVD-Ordner",
"EDV-DVD-Aufbewahrung",
"EDV-CD-Aufbewahrung",
"CD&DVD Aufbewahrung",
"Multimediabox"
]
}
搜索查询
GET /so53412408/_search
{
"query": {
"match": {
"categoryNames": "schwarzCD&DVD Aufbewahrung"
}
}
}
结果
CD&DVD Aufbewahrung -> Found
CD&DVD aufbewahrung -> Found
schwarz CD&DVD Aufbewahrung -> Found
CD&DVD Aufbewahrung gelb -> Found
schwarz CD&DVD Aufbewahrung gelb -> Found
CD&DVD schwarz Aufbewahrung -> Not Found
Aufbewahrung CD&DVD -> Not Found
schwarz CD & DVD Aufbewahrung -> Not Found
schwarzCD&DVD Aufbewahrung -> Not Found
关于elasticsearch - Elasticsearch-按术语查找仅是给定查询字符串一部分的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53412408/