我有一个带有“序列号”字段的文档。该序列号是ABC.XXX.DEF,其中XXX表示通配符。 XXX可以是\ d {3} [a-zA-Z0-9]。
因此用户可以搜索:
ABC.123.DEF
ABC.234.DEF
ABC.XYZ.DEF
文档仅包含
ABC.XXX.DEF
当用户查询ABC.123.DEF时,我需要单击包含ABC.XXX.DEF的文档。由于其他文档可能包含ABC.DEF.XXX,并且一定不要被单击,因此我的基本弹力搜索知识用尽了。
我是否必须从查询端或在分析/标记模式时解决问题?
谁能给我一个例子来解决这个问题?
答案 0 :(得分:0)
只要序列号定义明确,我想到的第一个解决方案就是将序列号分为三个部分(例如,“ part1”,“ part2”和“ part3”)并将它们索引为三个单独的字段。由通配符组成的部分应具有特殊值,或者完全不能索引。然后在查询时,我将以同样的方式拆分用户提供的序列号。假设没有对由通配符组成的部分建立索引,我的查询将如下所示:
"query": {
"bool": {
"must":[
{
"bool": {
"should": [
{
"match": {
"part1": "ABC"
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "part1"
}
}
}
}
]
}
},
... // Similar code for other parts
]
}
}