首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch 7,整数值提升

elasticsearch 7,整数值提升
EN

Stack Overflow用户
提问于 2019-09-26 18:07:45
回答 2查看 247关注 0票数 0

我试图通过"created“字段(一个整数/时间戳)来提高搜索效率,但总是遇到

代码语言:javascript
复制
"{"error":{"root_cause":[{"type":"parsing_exception","reason":"Unknown key for a START_OBJECT in [script].","line":1,"col":181}],"type":"parsing_exception","reason":"Unknown key for a START_OBJECT in [script].","line":1,"col":181},"status":400}"

没有'script‘,查询就能正常工作。但是我已经没有办法正确地编写这个脚本了。有什么想法吗?

代码语言:javascript
复制
 return [
            'index' => 'articles_' . $this->system,
            'body'  => [
                'size' => $this->size,
                'from' => $this->start,

                'sort'  => [
                    $this->order => 'desc',
                ],
                'query' => [
                    'query_string' => [
                        'query'            => $this->term,
                        'fields'           => ['title^5', 'caption^3', 'teaser^2', 'content'],
                        'analyze_wildcard' => true,
                    ],
                    'script' => [
                        'script' => [
                            'lang' => 'painless',
                            'source' => "doc['@created'].value / 100000",
                        ],
                    ],
                ],
            ],

        ];

编辑:已更新查询,但仍遇到"{"error":{"root_cause":[{"type":"parsing_exception",“原因”:“query_string查询格式错误,应为END_OBJECT但找到FIELD_NAME",”行“:1,”列“:171}],”类型“:”parsing_exception“,”原因“:”query_string格式查询,应为END_OBJECT但找到FIELD_NAME",“行”:1,“列”:171},“状态”:400}“

EN

回答 2

Stack Overflow用户

发布于 2019-09-27 15:07:35

脚本不是独立属性。它应该是bool的一部分。当您有多个过滤器时,这些过滤器应该在必须/应该/过滤器中的bool下

代码语言:javascript
复制
'body'  => [
                'size' => $this->size,
                'from' => $this->start,

                'sort'  => [
                    $this->order => 'desc'
                ],
                'query' => [
                      'bool' => [
                          'must' =>[
                              'query_string' => [
                                'query'    => $this->term,
                                'fields'   => ['title^5', 'caption^3',                        'teaser^2', 'content'],
                                'analyze_wildcard' => true
                              ],
                             'script' => [
                                'script' => [
                                  'lang' => 'painless',
                                  'source' => "doc['@created'].value / 100000"
                                ]
                              ]
                          ]
                      ]
                ]
            ]

上面可能有括号的语法问题(我无法测试它),查询结构是正确的

票数 0
EN

Stack Overflow用户

发布于 2019-10-02 19:02:42

代码语言:javascript
复制
...

'query' => [
                    'function_score' => [
                        'query' => [
                            'query_string' => [
                                'query'            => $this->term,
                                'fields'           => ['title^10', 'caption^8', 'teaser^5', 'content'],
                                'analyze_wildcard' => true,
                            ],
                        ],

                        'script_score' => [
                            'script' => [
                                'lang'   => 'expression',
                                'source' => "_score + (doc['created'] / 10000000000000)",
                            ],

                        ],
                    ],
                ],

是我最终的解决方案。遗憾的是,后来在elasticsearch的文档中找到了它。但你真的必须强烈地划分时间戳,以确保它不会完全压倒最佳匹配。

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

https://stackoverflow.com/questions/58114424

复制
相关文章

相似问题

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