在弹性搜索中过滤通配符搜索

时间:2015-01-30 23:39:05

标签: elasticsearch

我正在尝试使用弹性搜索在通配符查询上添加复杂的过滤器。过滤器似乎正在工作,但是,结果没有考虑到通配符。这是可能的还是可以替代通配符过滤器?查询如下:

{
  "query": {
    "filtered": {
      "query": {
        "wildcard": {
          "name": "*frog*"
        },
        "filter": {
          "bool": {
            "must": {
              "term": {
                "is_animal": false
              }
            }
          },
          "or": [
            {
              "terms": {
                "reptiles.codes": [
                  27
                ]
              }
            },
            {
              "nested": {
                "path": "owners",
                "query": {
                  "bool": {
                    "should": {
                      "term": {
                        "pets": "cat"
                      }
                    }
                  }
                }
              }
            },
            {
              "nested": {
                "path": "locations",
                "query": {
                  "bool": {
                    "should": {
                      "term": {
                        "home": true
                      }
                    }
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

或者,我可以在我的“bool”中添加通配符作为过滤器:{“must”:....}}?

1 个答案:

答案 0 :(得分:1)

你绝对应该在你的分析仪中使用ngram标记过滤器,而不是运行一个非常慢的通配符,特别是如果它以星形开头,就是这里的情况。

话虽这么说,但我不明白为什么通配符部分不适用于此处。你有可能用一个完整的例子重现你的案例吗?可能你有特定的分析仪吗?