Filter 我不知道';我无法从elasticsearch查询中获取任何文档。有人能指出我的错误吗?
我以为我已经找到了Elasticsearch,但我怀疑我没能找到什么,因此出现了这个问题: 我正在为产品编制索引,这些产品有大量的字段,但问题是:Filter 我不知道';我无法从elasticsearch查询中获取任何文档。有人能指出我的错误吗?,filter,elasticsearch,Filter,elasticsearch,我以为我已经找到了Elasticsearch,但我怀疑我没能找到什么,因此出现了这个问题: 我正在为产品编制索引,这些产品有大量的字段,但问题是: { "show_in_catalogue": { "type": "boolean", "index": "no" }, "prices": { "type": "object", "dynamic": false, "properties": { "site_id": {
{
"show_in_catalogue": {
"type": "boolean",
"index": "no"
},
"prices": {
"type": "object",
"dynamic": false,
"properties": {
"site_id": {
"type": "integer",
"index": "no"
},
"currency": {
"type": "string",
"index": "not_analyzed"
},
"value": {
"type": "float"
},
"gross_tax": {
"type": "integer",
"index": "no"
}
}
}
}
我试图返回所有“在目录中显示”为真的文件,并且有一个站点id为1的价格:
{
"filter": {
"term": {
"prices.site_id": "1",
"show_in_catalogue": true
}
},
"query": {
"match_all": {}
}
}
这将返回零结果。我还尝试了一个带有两个独立术语的“和”过滤器——没有运气
如果没有筛选器,则返回的其中一个文档的子集如下所示:
{
"prices": [
{
"site_id": 1,
"currency": "GBP",
"value": 595,
"gross_tax": 1
},
{
"site_id": 2,
"currency": "USD",
"value": 745,
"gross_tax": 0
}
]
}
我希望我可以在这里省略这么多的文件;我不相信这是偶然的,但我当然不能肯定
我是否错过了一个重要的知识点,或者我做了一些非常重要的事情?无论哪种方式,我都会感谢专家在这一点上的知识。谢谢
编辑:
在J.T.的建议下,我还尝试对文档重新编制索引,以便prices.site_id
被编入索引-没有变化。还尝试了下面的bool/must过滤器,但无效
澄清一下,我使用空查询的原因是web界面可能会提供一个查询字符串,但相同的代码仅用于过滤所有产品。因此,我留在查询中,但为空,因为在没有查询字符串的情况下,Elastica似乎会产生这样的结果
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"show_in_catalogue": true
}
},
{
"term": {
"prices.site_id": 1
}
}
]
}
}
}
}
}
您已将站点id设置为{“索引”:“否”}。这会告诉ElasticSearch从索引中排除该字段,从而无法查询或筛选该字段。数据仍将被存储。同样,可以将字段设置为仅在索引中且可搜索,但不存储
我对ElasticSearch也是新手,不能总是问问题!我被你的质疑弄糊涂了。如果您打算“只是过滤”,那么您不需要查询。我不明白的是你在术语过滤器中使用了两个字段。我从来没有这样做过。我猜它就像一个OR?而且,如果没有匹配项,它似乎会返回所有内容。如果您希望查询的结果经过过滤,则需要使用
-d '{
"query": {
"filtered": {
"query": {},
"filter": {}
}
}
}'
如果您只想应用过滤器,那么这个过滤器应该在不需要任何“查询”的情况下工作
-d '{
"filter": {
"bool": {
"must": [
{
"term": {
"show_in_catalogue": true
}
},
{
"term": {
"prices.site_id": 1
}
}
]
}
}
}'
谢谢-我尝试了你的建议并澄清了我的问题。我只是在玩弄一个空查询,以便在过滤器处理完整的结果集时填充它。仍然无法从中得到任何东西,但我会继续进行黑客攻击。啊哈-如果我将所有我想过滤的内容都编入索引,那么它就起作用了。我没有意识到你需要索引东西来过滤——我以为它只适用于查询搜索!如果我接受这个答案,你会澄清你的编辑来解释这一点,让未来的读者找到它吗?谢谢编辑!对不起,我在用手机重新检查你的问题。因此,关于索引编号的编辑并不突出。