2016-02-28 87 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] 
相關問題