2016-05-30 239 views
0

因此,我最终设置了elasticsearch数据库并将数据导入到其中。Elasticsearch - field_value_factor,缺少参数

有时,当我尝试从前端请求数据时,我得到500错误(不是所有的时间,只是有时)。

我试图从POSTMAN请求数据(查看ES错误消息)。

我:

{ 
    "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[9m4uVcf3TLmQ9Kr7z_fSpQ][text][0]: QueryPhaseExecutionException[[text][0]: query[filtered(function score (blended(terms: [url_words:test, domain_words:test, title:test, body:test]), functions: [{filter(*:*), function [org.elast[email protected]56319fc9]}{filter(*:*), function [org.elast[email protected]60b46f02]}]))->cache(_type:page)],from[0],size[25]: Query Failed [Failed to execute main query]]; nested: ElasticsearchException[Missing value for field [lang_en]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][1]: QueryPhaseExecutionException[[text][1]: query[filtered(function score (blended(terms: [url_words:test, domain_words:test, title:test, body:test]), functions: [{filter(*:*), function [org.elast[email protected]3ca7d41e]}{filter(*:*), function [org.elast[email protected]63daf999]}]))->cache(_type:page)],from[0],size[25]: Query Failed [Failed to execute main query]]; nested: ElasticsearchException[Missing value for field [lang_en]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][2]: QueryPhaseExecutionException[[text][2]: query[filtered(function score (blended(terms: [url_words:test, domain_words:test, title:test, body:test]), functions: [{filter(*:*), function [org.elast[email protected]27521539]}{filter(*:*), function [org.elast[email protected]66dbac2b]}]))->cache(_type:page)],from[0],size[25]: Query Failed [Failed to execute main query]]; nested: ElasticsearchException[Missing value for field [lang_en]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][3]: QueryPhaseExecutionException[[text][3]: query[filtered(function score (blended(terms: [url_words:test, domain_words:test, title:test, body:test]), functions: [{filter(*:*), function [org.elast[email protected]73bb4f5e]}{filter(*:*), function [org.elasticsearch.common.lucene.search.function.FieldValueFactorFu[email protected]]}]))->cache(_type:page)],from[0],size[25]: Query Failed [Failed to execute main query]]; nested: ElasticsearchException[Missing value for field [lang_en]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][4]: QueryPhaseExecutionException[[text][4]: query[filtered(function score (blended(terms: [url_words:test, domain_words:test, title:test, body:test]), functions: [{filter(*:*), function [org.elast[email protected]b650549]}{filter(*:*), function [org.elast[email protected]7fbe90f4]}]))->cache(_type:page)],from[0],size[25]: Query Failed [Failed to execute main query]]; nested: ElasticsearchException[Missing value for field [lang_en]]; }]", 
    "status": 500 
} 

这里是请求正文:

{ 
     "query": { 
     "function_score": { 
      "query": { 
      "multi_match": { 
       "query": "test", 
       "minimum_should_match": "-25%", 
       "type": "cross_fields", 
        "tie_breaker": 0.5, 
        "fields": ["title^3", "body", "url_words^2", "domain_words^8"] 
      } 

      }, 
      "functions": [{ 
       "field_value_factor": { 
       "field": "rank", 
       "factor": 1 
      } 
     },{ 
         "field_value_factor": { 
       "field": "lang_en" 
      } 
       }] 
     } 
     }, 
     "from": 0, 
     "size": 25 
    } 

我明白,缺少现场[lang_en]值的问题。我用google的结果玩弄了es,但没有成功。

ES版本:1.5.2

任何想法?

编辑:

我添加了 “失踪”:0,第二field_value_factor,但我得到这个错误,而不是:

{ 
    "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[9m4uVcf3TLmQ9Kr7z_fSpQ][text][0]: SearchParseException[[text][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n  \"query\": {\n  \"function_score\": {\n   \"query\": {\n   \"multi_match\": {\n    \"query\": \"test\",\n    \"minimum_should_match\": \"-25%\",\n    \"type\": \"cross_fields\",\n     \"tie_breaker\": 0.5,\n     \"fields\": [\"title^3\", \"body\", \"url_words^2\", \"domain_words^8\"]\n   }\n\n   },\n   \"functions\": [{\n    \"field_value_factor\": {\n    \"field\": \"rank\",\n    \"factor\": 1\n   }\n  },{\n      \"field_value_factor\": {\n    \"field\": \"lang_en\",\n    \"missing\": 0\n   }\n    }]\n  }\n  },\n  \"from\": 0,\n  \"size\": 25\n }\n]]]; nested: QueryParsingException[[text] field_value_factor query does not support [missing]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][1]: SearchParseException[[text][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n  \"query\": {\n  \"function_score\": {\n   \"query\": {\n   \"multi_match\": {\n    \"query\": \"test\",\n    \"minimum_should_match\": \"-25%\",\n    \"type\": \"cross_fields\",\n     \"tie_breaker\": 0.5,\n     \"fields\": [\"title^3\", \"body\", \"url_words^2\", \"domain_words^8\"]\n   }\n\n   },\n   \"functions\": [{\n    \"field_value_factor\": {\n    \"field\": \"rank\",\n    \"factor\": 1\n   }\n  },{\n      \"field_value_factor\": {\n    \"field\": \"lang_en\",\n    \"missing\": 0\n   }\n    }]\n  }\n  },\n  \"from\": 0,\n  \"size\": 25\n }\n]]]; nested: QueryParsingException[[text] field_value_factor query does not support [missing]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][2]: SearchParseException[[text][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n  \"query\": {\n  \"function_score\": {\n   \"query\": {\n   \"multi_match\": {\n    \"query\": \"test\",\n    \"minimum_should_match\": \"-25%\",\n    \"type\": \"cross_fields\",\n     \"tie_breaker\": 0.5,\n     \"fields\": [\"title^3\", \"body\", \"url_words^2\", \"domain_words^8\"]\n   }\n\n   },\n   \"functions\": [{\n    \"field_value_factor\": {\n    \"field\": \"rank\",\n    \"factor\": 1\n   }\n  },{\n      \"field_value_factor\": {\n    \"field\": \"lang_en\",\n    \"missing\": 0\n   }\n    }]\n  }\n  },\n  \"from\": 0,\n  \"size\": 25\n }\n]]]; nested: QueryParsingException[[text] field_value_factor query does not support [missing]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][3]: SearchParseException[[text][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n  \"query\": {\n  \"function_score\": {\n   \"query\": {\n   \"multi_match\": {\n    \"query\": \"test\",\n    \"minimum_should_match\": \"-25%\",\n    \"type\": \"cross_fields\",\n     \"tie_breaker\": 0.5,\n     \"fields\": [\"title^3\", \"body\", \"url_words^2\", \"domain_words^8\"]\n   }\n\n   },\n   \"functions\": [{\n    \"field_value_factor\": {\n    \"field\": \"rank\",\n    \"factor\": 1\n   }\n  },{\n      \"field_value_factor\": {\n    \"field\": \"lang_en\",\n    \"missing\": 0\n   }\n    }]\n  }\n  },\n  \"from\": 0,\n  \"size\": 25\n }\n]]]; nested: QueryParsingException[[text] field_value_factor query does not support [missing]]; }{[9m4uVcf3TLmQ9Kr7z_fSpQ][text][4]: SearchParseException[[text][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n  \"query\": {\n  \"function_score\": {\n   \"query\": {\n   \"multi_match\": {\n    \"query\": \"test\",\n    \"minimum_should_match\": \"-25%\",\n    \"type\": \"cross_fields\",\n     \"tie_breaker\": 0.5,\n     \"fields\": [\"title^3\", \"body\", \"url_words^2\", \"domain_words^8\"]\n   }\n\n   },\n   \"functions\": [{\n    \"field_value_factor\": {\n    \"field\": \"rank\",\n    \"factor\": 1\n   }\n  },{\n      \"field_value_factor\": {\n    \"field\": \"lang_en\",\n    \"missing\": 0\n   }\n    }]\n  }\n  },\n  \"from\": 0,\n  \"size\": 25\n }\n]]]; nested: QueryParsingException[[text] field_value_factor query does not support [missing]]; }]", 
    "status": 400 
} 

回答

1

问题出在愚蠢的AWS ES版本1.5.2。

我的解决方案:创建EC2实例并手动部署Elasticsearch。

+0

您仍然需要将“missing”参数添加到您的查询中,单独升级是不够的,因此我的答案仍然存在。 – Val

+0

是的,谢谢你! – IvRRimUm

+0

很高兴我们弄明白了。 – Val

1

在至少一个文件,该场lang_en为null,空或根本不存在。

您需要修改field_value_factor功能,以告诉它在这样做的情况下,通过使用missing设置与任何默认值是有道理的(0,1等):

{ 
    "field_value_factor": { 
     "field": "lang_en", 
     "missing": 1    <---- add this line 
    } 
} 
+0

你好,感谢您的回复。我收到了错误,请检查问题,我更新了它! – IvRRimUm

+0

哦,1.5.2中“missing”还没有出现,它只出现在1.6中。对不起这是我的错。 – Val

+0

奥基,你觉得怎样可以解决问题? – IvRRimUm