2016-02-28 44 views
3

我正在开发具有完成功能的简单搜索应用程序。 我需要以某种方式确保这些建议,所以我想出了这样做的最简单方法是向完成建议者添加上下文。我的问题是,我不知道如何在嵌套字段中使用建议上下文。嵌套字段的Elasticsearch完成建议器上下文

这就是我的映射看起来像,非常简单,只有3个字段和一个嵌套。

curl-XPUT'http: //localhost: 9200/cr/_mapping/agreement_index'-d'{ 
    "agreement_index": { 
     "properties": { 
      "agreement_name": { 
       "type": "string", 
       "fields": { 
        "suggest": { 
         "type": "completion", 
         "analyzer": "simple", 
         "payloads": false, 
         "preserve_separators": true, 
         "preserve_position_increments": true, 
         "max_input_length": 50, 
         "context": { 
          "permitted": { 
           "type": "category", 
           "path": "permitted", 
           "default": [] 
          } 
         } 
        } 
       } 
      }, 
      "permitted": { 
       "type": "integer" 
      }, 
      "team": { 
       "type": "nested", 
       "dynamic": "false", 
       "properties": { 
        "email": { 
         "type": "string", 
         "fields": { 
          "raw": { 
           "type": "string", 
           "index": "not_analyzed" 
          }, 
          "suggest": { 
           "type": "completion", 
           "analyzer": "simple", 
           "payloads": false, 
           "preserve_separators": true, 
           "preserve_position_increments": true, 
           "max_input_length": 50, 
           "context": { 
            "permitted": { 
             "type": "category", 
             "path": "permitted", 
             "default": [] 
            } 
           } 
          } 
         } 
        }, 
        "name": { 
         "type": "string", 
         "fields": { 
          "raw": { 
           "type": "string", 
           "index": "not_analyzed" 
          }, 
          "suggest": { 
           "type": "completion", 
           "analyzer": "simple", 
           "payloads": false, 
           "preserve_separators": true, 
           "preserve_position_increments": true, 
           "max_input_length": 50, 
           "context": { 
            "permitted": { 
             "type": "category", 
             "path": "permitted", 
             "default": [] 
            } 
           } 
          } 
         } 
        }, 
        "permitted": { 
         "type": "integer" 
        } 
       } 
      } 
     } 
    } 
}' 

在这样的索引文件:

curl-XPUT'http: //localhost: 9200/cr/agreement_index/1'-d'{ 
    "agreement_name": "QWERTY", 
    "team": [{ 
     "name": "Tomasz Sobkowiak", 
     "permitted": ["2"], 
     "email": "[email protected]" 
    }], 
    "permitted": ["2"] 
}' 

我有以下错误:

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"one or more prefixes needed"}],"type":"illegal_argument_exception","reason":"one or more prefixes needed"},"status":400} 

从嵌套字段都做工精细完成suggesters去除背景后。 所以我的问题是,我怎么可以在嵌套字段中使用上下文建议器,路径指向外部文档中的字段?是甚至可能的吗?

回答

3

问题在于你的映射。缺省值不能留空。您需要在映射中为context suggester分配至少一个默认值。

"context": { 
     "permitted": { 
      "type": "category", 
      "path": "permitted", 
      "default": [] // <-- defaults can not be empty, provide at least one default integer value 
     } 
} 

The value of the default field is used, when ever no specific is provided for the certain context. Note that a context is defined by at least one value.

而且,在你试图索引文档,您使用的是permittedstring,而它被映射为Integer

"permitted": ["2"] // <-- change this to "permitted":[2] 
相关问题