2017-07-27 39 views
0

私は検索を行い、結果をソートしようとしています。しかし、私はなぜエラーが発生しているのか分からない。ElasticSearch - ソートが機能しない

EDIT - 完全なマッピングを提供します。

POST /index/_search 
{ 

    "sort": [ 
    { "myfield.sort" : {"order" : "asc"}} 
    ] 
} 

私は次のエラーを取得するには::

{ 
    "error": { 
     "root_cause": [ 
     { 
      "type": "query_shard_exception", 
      "reason": "No mapping found for [myfield.sort] in order to sort on", 
      "index_uuid": "VxyKnppiRJCrrnXfaGAEfA", 
      "index": "index" 
     } 
     ] 
    "status": 400 
} 

私は上のドキュメントを以下のよ、私はこのように、並べ替えと検索を行っ

"myindex": { 
     "mappings": { 
     "mytype": { 
      "dynamic_templates": [ 
       { 
        // Dynamic templates here! 
       } 
      ], 
      "properties": { 
       "fieldid": { 
        "type": "keyword", 
        "store": true 
       }, 
       "fields": { 
        "properties": { 
        "myfield": { 
         "type": "text", 
         "fields": { 
          "sort": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         }, 
         "analyzer": "myanalyzer" 
        }      
        } 
       }, 
       "isDirty": { 
        "type": "boolean" 
       } 
      } 
     } 
     } 
    } 
} 

elasticsearch。 DOCUMENTATION

また、私は、このリンクをチェック: DOCUMENTATION

は、誰かが私を助けて提供することができますか?

+0

あなたは何を得るのですができますか? – Val

+0

私はマッピングを取得します。しかし問題はマッピングではなく、検索であった。最後のコメントでソリューションを確認できます。とにかくありがとう:) – NatsuDragonEye

答えて

1

あなたのマッピングが正しく設定されていない可能性があります。いくつかの文書(サブフィールドを指定する必要はありません(複数可)をアップロードし、

PUT /your-index/ 
{ 
    "settings": { 
     "number_of_replicas": "1", 
     "number_of_shards": "3", 

     "analysis": { 
      "customanalyzer": { 
       "ID": { 
        "type": "custom", 
        "tokenizer": "keyword", 
        "filter": ["lowercase"] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "thingy": { 
      "properties": { 
       "myfield": { 
        "type": "text", 
        "analyzer": "ID", 

        "fields": { 
         "sort": { 
          "type": "keyword", 
          "ignore_above": 256 
         } 
        } 
       } 
      } 
     } 
    } 
} 

をインデックスが実際にその後

GET /your-index/thingy/_mapping 

myfield.sortフィールドの外観を持っているかどうかを確認倍増する:私は、以下のものを使用してに沿って続きます、elasticsearchはあなたのためにそれを行います)

POST /your-index/thingy/ 
{ 
    "myfield": "some-value" 
} 

今、私は次のように検索することができます:

POST /your-index/thingy/_search 
{ 
    "sort": [ 
     { "myfield.sort": { "order": "asc" } } 
    ] 
} 

ので、必ず確認してください:

  • ネーミング/タイプミスの(あなたが知っていることはありません)
  • あなたのマッピング(それは「myfield.sort」フィールドを持っていない)
  • あなたは正しいで探していますインデックス? 9200/index`: `カール-XGETローカルホストを呼び出すときに

がうまくいけば、これは

+0

私は 'multi_field'またはサブフィールド、_nestedフィールド_ではなく、それはすでに何かを意味すると思います:) –

+0

良い点、私はそれを少し変更しましたが、マルチフィールドは... https://www.elastic.co/guide/en/elasticsearch/reference/1.4/_multi_fields.html? :D – Tessmore

+0

'multi_field' _types_はなくなりました。つまり、" type ":" multi_field "'を指定する必要はなくなりました。しかし、文字列をさまざまな方法で分析および索引付けできるという原則はまだあります。人々はまだこれを複数のフィールドまたはサブフィールドと呼んでいます(より良い名前はありますか)。 –

関連する問題