首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询DSL在pyes搜索中不起作用

查询DSL在pyes搜索中不起作用
EN

Stack Overflow用户
提问于 2015-11-26 00:24:30
回答 1查看 178关注 0票数 1

我正在尝试使用自定义查询DSL来使用pyes库获取结果。当我使用命令行时,我有一个可以工作的查询DSL

代码语言:javascript
复制
curl -XGET localhost:9200/test_index/_search -d '{
    "query": {
       "function_score": {
            "query": {
                "match_all": {}
            },
            "field_value_factor": {
                "field": "starred",
                "modifier": "none",
                "factor": 2
            }
        }
    },
    "aggs" : {
        "types" : {
            "filters" : {
                "filters" : {
                    "category1" : { "type" : { "value" : "category1"}},
                    "category2" : {  "type" : { "value" : "category2"}},
                    "category3" : { "type" : { "value" : "category3"}},
                    "category4": { "type" : { "value" : "category4"}},
                    "category5" : { "type" : { "value" : "category5"}}
                }
            }, 
            "aggs": {
                "topFoundHits": {
                    "top_hits": {
                        "size": 5
                    }
                }
            }
        }
    }
}'

这里的想法是在许多分类的文档中搜索与特定字符串查询匹配的所有文档。然后使用聚合,我希望按类别找到前五个结果文档。加星的项目被提升,以便它们显示在其他搜索结果之上。

当我直接在终端中输入上面列出的命令时,这很有效,但当我尝试将它放入pyes时,它就不起作用了。我不确定做这件事最好的方法是什么。对于我来说,pyes库的文档让我很困惑,无法将它完全转换成pyes对象。

我正在尝试做以下几件事:

代码语言:javascript
复制
 query_dsl = self.get_text_index_query_dsl()
 resulting_docs = conn.search(query=query_dsl)

(其中self.get_test_index_query_dsl返回上面的查询dsl dict )

按原样搜索会给出一个:ElasticSearchException: QueryParsingException[[test_index] No query registered for [query]]; }]

如果我删除父"query“映射并尝试:

代码语言:javascript
复制
query_dsl = {
   "function_score": {
        "query": {
            "match_all": {}
        },
        "field_value_factor": {
            "field": "starred",
            "modifier": "none",
            "factor": 2
        }
    },
    "aggs" : {
        "types" : {
            "filters" : {
                "filters" : {
                    "category1" : { "type" : { "value" : "category1"}},
                    "category2" : {  "type" : { "value" : "category2"}},
                    "category3" : { "type" : { "value" : "category3"}},
                    "category4": { "type" : { "value" : "category4"}},
                    "category5" : { "type" : { "value" : "category5"}}
                }
            }, 
            "aggs": {
                "topFoundHits": {
                    "top_hits": {
                        "size": 5
                    }
                }
            }
        }
    }
}

这也会导致以下错误:ElasticSearchException: ElasticsearchParseException[Expected field name but got START_OBJECT "aggs"]; }]

这些错误加上pyes似乎还没有'topFoundHits‘功能的事实(我认为)阻碍了我的脚步。

你知道为什么会发生这种情况,以及如何解决吗?非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-11-26 02:56:33

我使用这个库实现了这一点,在这个库中,您只需使用常规查询dsl JSON语法:http://elasticsearch-dsl.readthedocs.org/en/latest/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33921558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档