带有通配符的Elasticsearch索引字段并进行搜索

时间:2018-07-20 13:05:39

标签: elasticsearch

我有一个带有“序列号”字段的文档。该序列号是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,并且一定不要被单击,因此我的基本弹力搜索知识用尽了。

我是否必须从查询端或在分析/标记模式时解决问题?

谁能给我一个例子来解决这个问题?

1 个答案:

答案 0 :(得分:0)

只要序列号定义明确,我想到的第一个解决方案就是将序列号分为三个部分(例如,“ part1”,“ part2”和“ part3”)并将它们索引为三个单独的字段。由通配符组成的部分应具有特殊值,或者完全不能索引。然后在查询时,我将以同样的方式拆分用户提供的序列号。假设没有对由通配符组成的部分建立索引,我的查询将如下所示:

"query": {
  "bool": {
    "must":[
      {
        "bool": {
          "should": [
            {
              "match": {
                "part1": "ABC"
              }
            },
            {
              "bool": {
                "must_not": {
                  "exists": {
                    "field": "part1"
                  }
                }
              }
            }
          ]
        }
      },
      ... // Similar code for other parts
    ] 
  }
}