如何在Elasticsearch中的文本块中找到所有完全匹配?

时间:2014-05-08 02:52:21

标签: search elasticsearch exact-match

我在弹性服务器中获得了数百本书名的索引,文档如下:

{"_id": 123, "title": "The Diamond Age", ...}

我已经获得了用户输入的自由格式文本块。文本块可能包含许多书籍标题,并且大写不一。

我想在文本块中找到所有书名,因此我可以链接到特定的书页。

知道我怎么能这样做吗?我一直在寻找文本块中的精确短语匹配,没有运气。

1 个答案:

答案 0 :(得分:0)

您需要将字段标题索引为not_analyzed或使用关键字分析器。 这将告诉elasticsearch在您发送查询时不对该字段执行任何操作,这将使您能够进行完全匹配搜索。

我建议你保留一个分析版本以及一个not_analyzed版本,以便能够进行精确搜索以及分析搜索。你的映射会像这样,在这种情况下我假设类型名称是你的情况下的电影。

"mappings":{
  "movies":{
    "properties":{
      "title":{
        "type": "string",
        "fields":{
          "row":{
            "type": "string",
            "index": "not_analyzed"
          }
        }
      }
    }
  }
}

这将为您提供两个字段标题,其中包含已分析的标题和title.row,其中包含完全没有处理索引的确切值。

如果您输入了确切的

title.row将匹配