我正在使用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"
}
}
}
}
}
}
答案 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>