0

我正在使用 elasticsearch-model gem 构建 Rails Web 应用程序。我想为我的 Place 模型构建带有过滤功能的搜索查询。我成功地按名称进行搜索,但是我希望能够用城市过滤我的搜索(在这个例子中是伦敦)。

现在我的查询看起来像这样:

"query": {
    "bool": {
      "must": {
        "match": {
          "name": {
            "query": term,
            "operator": "and",
            "fuzziness": 1
          }
        }
      },
      "filter": {
          "term": {
              "city": "London"
          }
      }
    }
  }

而不是我简单的调用Place.search("here goes query").records.to_a

没有过滤器部分搜索工作正常,但是当我添加过滤器时,我没有得到任何结果。

这是地方搜索的映射:

settings analysis: {
    filter: {
        ngram_filter: {
            type: "nGram",
            min_gram: 2,
            max_gram: 20
        }
    },
    analyzer: {
        ngram_analyzer: {
            type: "custom",
            tokenizer: "standard",
            filter: [
                "lowercase",
                "asciifolding",
                "ngram_filter"
            ]
        },
        whitespace_analyzer: {
            type: "custom",
            tokenizer: "whitespace",
            filter: [
                "lowercase",
                "asciifolding"
            ]
        }
    }
} do
  mappings dynamic: 'false' do
    indexes :name,
            type: "string",
            analyzer: "ngram_analyzer",
            search_analyzer: "whitespace_analyzer"

这是我用来查看如何过滤的链接:Elasticsearch doc

4

1 回答 1

0

我必须在将城市类型映射到字符串中进行定义,并且在构建令牌时不对该字段执行任何类型的分析。

所以在映射中我添加了:

indexes :city,
        type: "string",
        index: "not_analyzed"
于 2016-10-07T17:12:03.137 回答