ElasticSearch搜索部分网址

时间:2016-12-02 13:01:25

标签: elasticsearch

我正在使用ElasticSearch 5,但无法找到以下解决方案: 我想在文档中搜索带斜杠(网址的一部分)的字符串。但它不会返回匹配的文件。 我已经读过一些东西,带有斜线的字符串被ES拆分,这不是我想要的字段。我试图设置" not_analyzed"在带有映射的字段上,但我似乎无法以某种方式使其工作。

"创建索引": 放http://localhost:9200/test

{
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "type1" : {
            "properties" : {
                "field1" : { "type" : "text","index": "not_analyzed" }
            }
        }
    }
}

"添加文档":POST http://localhost:9200/test/type1/

{
    "field1" : "this/is/a/url/test"
}

"搜索文件"发布http://localhost:9200/test/type1/_search

{
    "size" : 1000,
    "query" : {
        "bool" : {
            "must" : [{
                    "term" : {
                        "field1" : {
                            "value" : "this/is/a/url/test"
                        }
                    }
                }
            ]
        }
    }
}

响应:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

"映射响应":GET http://localhost:9200/test/_mapping?pretty

{
  "test": {
    "mappings": {
      "type1": {
        "properties": {
          "field1": {
            "type": "text"
          }
        }
      }
    }
  }
}

2 个答案:

答案 0 :(得分:2)

使用term查询获取完全匹配是正确的。但是,您的初始映射是错误的。

"type" : "text", "index": "not_analyzed"

应该是这个

"type": "keyword"

(注意:ES5中的keyword类型相当于ES 2.x中的not_analyzed string

您需要删除索引并使用更正的映射重新创建索引。然后,您的term查询将有效。

答案 1 :(得分:1)

我怀疑您需要的是Match query,而不是条款查询。条款是寻找单个“术语”/单词,并且不会使用分析器来破坏您的请求。

std::vector<int>