2016-05-30 236 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