Elasticsearch 不能在开头使用斜杠
Elasticsearch doesn't work with an slash at beginning
我的数据库中充满了这样的文件:
{
_index: "bla_bla",
.
.
.
_source: {
domain: "somedomain.extension",
path: "/you/know/the/path",
lang: "en",
keywords: ["yeah", "you", "rock", "dude", "help", "me", "good", "samaritan"]
}
}
当我搜索时——不管我在寻找什么——它就像一个魅力,但是,如果我试图通过使用名为 path 的字段来过滤某些东西——只是——不起作用;不会抛出任何错误或警告。经过艰苦的研究,我想这是因为路径开头的斜线,我可能是对的还是错的,但无论如何我需要像这样过滤:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": {
"terms": {
"keywords": ["Whosebug", "rocks", "!"]
}
},
"must_not": {
"term": {
"path": "/"
// This works, i.e -> "lang": "en"
}
}
}
}
}
},
"from": 0,
"size": 9
}
TL;DR:拥有 urls 的数据库,我如何才能只获得 non-root [路径比“/”]长?
免责声明:我不是 ES 方面的专家,但如果理解正确,你想要的是排除所有只有 /
的文档。到底。看到你总是将数据存储为 /path
如果你有一个包含 1 个字符的字符串,它应该总是 /
,那么为什么不使用正则表达式呢?
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-filter.html
像这样的东西应该可以解决问题,我认为:
{
"query": {
"filtered": {
"filter": {
"and": [
{
"bool": {
"should": {
"terms": {
"keywords": [
"Whosebug",
"rocks",
"!"
]
}
}
}
},
{
"filter": {
"regexp": {
"path": ".{1,}"
}
}
}
]
}
}
},
"from": 0,
"size": 9
}
在 ElasticSearch 中,文本会根据许多字符拆分,包括斜线。您需要做的是使用 "not_analyzed" 索引。这是一个工作示例,请注意 "path" 字段上的索引规范:
PUT /index1/test/_mapping
{
"test" : {
"properties" : {
"message" : {"type" : "string"},
"path" : {"type" : "string", "index" : "not_analyzed"}
}
}
}
POST index1/test
{
"path" : "/foo/bar"
}
GET index1/test/_search
{
"query": {
"filtered": {
"filter": {
"term": {
"path": "/foo/bar"
}
}
}
}
}
我的数据库中充满了这样的文件:
{
_index: "bla_bla",
.
.
.
_source: {
domain: "somedomain.extension",
path: "/you/know/the/path",
lang: "en",
keywords: ["yeah", "you", "rock", "dude", "help", "me", "good", "samaritan"]
}
}
当我搜索时——不管我在寻找什么——它就像一个魅力,但是,如果我试图通过使用名为 path 的字段来过滤某些东西——只是——不起作用;不会抛出任何错误或警告。经过艰苦的研究,我想这是因为路径开头的斜线,我可能是对的还是错的,但无论如何我需要像这样过滤:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": {
"terms": {
"keywords": ["Whosebug", "rocks", "!"]
}
},
"must_not": {
"term": {
"path": "/"
// This works, i.e -> "lang": "en"
}
}
}
}
}
},
"from": 0,
"size": 9
}
TL;DR:拥有 urls 的数据库,我如何才能只获得 non-root [路径比“/”]长?
免责声明:我不是 ES 方面的专家,但如果理解正确,你想要的是排除所有只有 /
的文档。到底。看到你总是将数据存储为 /path
如果你有一个包含 1 个字符的字符串,它应该总是 /
,那么为什么不使用正则表达式呢?
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-filter.html
像这样的东西应该可以解决问题,我认为:
{
"query": {
"filtered": {
"filter": {
"and": [
{
"bool": {
"should": {
"terms": {
"keywords": [
"Whosebug",
"rocks",
"!"
]
}
}
}
},
{
"filter": {
"regexp": {
"path": ".{1,}"
}
}
}
]
}
}
},
"from": 0,
"size": 9
}
在 ElasticSearch 中,文本会根据许多字符拆分,包括斜线。您需要做的是使用 "not_analyzed" 索引。这是一个工作示例,请注意 "path" 字段上的索引规范:
PUT /index1/test/_mapping
{
"test" : {
"properties" : {
"message" : {"type" : "string"},
"path" : {"type" : "string", "index" : "not_analyzed"}
}
}
}
POST index1/test
{
"path" : "/foo/bar"
}
GET index1/test/_search
{
"query": {
"filtered": {
"filter": {
"term": {
"path": "/foo/bar"
}
}
}
}
}