2016-12-09 32 views
1

これは新しい変更だと思いますが、このマッピングの何が問題なのか分かりません。これは_mappingコールを通じてElasticSearchに登録フィールドのマッピングから取得されます:ElasticSearch 5.xテキストフィールドでのソート

"key": { 
    "type": "text", 
    "fields": { 
     "keyword": { 
      "type": "keyword", 
      "ignore_above": 256 
     } 
    } 
} 

私は一種の「キー」フィールドを使用して、私はこの例外を取得する場合。 fieldData = trueを追加しようとしましたが、それもうまくいきませんでした。まず

Caused by: RemoteTransportException[[_6qwpaI][127.0.0.1:9300][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [key] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.]; 
Caused by: java.lang.IllegalArgumentException: Fielddata is disabled on text fields by default. Set fielddata=true on [key] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. 
    at org.elasticsearch.index.mapper.TextFieldMapper$TextFieldType.fielddataBuilder(TextFieldMapper.java:335) 
    at org.elasticsearch.index.fielddata.IndexFieldDataService.getForField(IndexFieldDataService.java:111) 
    at org.elasticsearch.index.query.QueryShardContext.getForField(QueryShardContext.java:167) 
    at org.elasticsearch.search.sort.FieldSortBuilder.build(FieldSortBuilder.java:281) 
    at org.elasticsearch.search.sort.SortBuilder.buildSort(SortBuilder.java:151) 
    at org.elasticsearch.search.SearchService.parseSource(SearchService.java:678) 
    at org.elasticsearch.search.SearchService.createContext(SearchService.java:536) 
    at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:502) 
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:243) 
    at org.elasticsearch.action.search.SearchTransportService.lambda$registerRequestHandler$6(SearchTransportService.java:276) 
    at org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33) 
    at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) 
    at org.elasticsearch.transport.TransportService$6.doRun(TransportService.java:550) 
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:527) 
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

その後、私は、これが機能しない理由何らかの理由が表示されていない、私はこれはフィールド(例えばkey.keyword)の使用に関連するかもしれないと思ったが、私はそれをやっていないよので、 。

私はElasticSearch 5.xの新機能です。ドキュメント自体は矛盾していますので、誰かが正しい方向に向けることを願っています。

https://www.elastic.co/guide/en/elasticsearch/reference/current/fielddata.html

私は基本的に5.xのまで働いていたこの元のマッピングと同じ達成しようとしています:ところで

"mapping": { 
    "type": "string", 
    "fields": { 
     "raw": { 
      "type": "string", 
      "ignore_above": 256 
     }, 
     "english": { 
      "type": "string", 
      "analyzer": "english" 
     } 
    } 
} 

、私がキーワードだと思うこれは私が言及するものですフィールドは私のマッピングで定義していないので自動生成されます。

+0

この問題を解決できましたか?私は同様の問題に直面している:( – askids

+0

あなたのケースを助けるかどうかを確認するために、以下の答えを見てください。 – juminoz

答えて

1

5.xではなく、この設定を使用します。 "キーワード"は解析されない文字列の新しいタイプです。

{ 
    "mappings": { 
    "doc": { 
     "dynamic_templates": [ 
     { 
      "strings": { 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "text", 
       "fields": { 
       "raw": { 
        "type": "keyword", 
        "ignore_above": 256 
       }, 
       "english": { 
        "type": "text", 
        "analyzer": "english" 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

ここでは、私がElasticSearchフォーラムのLee Hinmanから得た説明です。あなたは、インデックス5.0以上でマッピングされていない文字列、ESが自動的 が フィールドのテキストバージョンと(.keyword下)キーワードのバージョンを作成する場合

これは実際にはかなり混乱していますが、match_mapping_typeは値 "text"を理解できません。このため切断があります

は、 match_mapping_typeのために使用される「動的」タイプは、フィールドの種類、必ずしもES タイプです。たとえば、match_mapping_typeは "long"のみをサポートしますが、 "integer"ではなく、ESタイプではなくデータ型にマップされるためです。だから ES自体が "テキスト"と "キーワード"を使用しても、データ型は で、まだ "文字列"です。私はこれが混乱して同意

、そこここにPRした:5.0+のための https://github.com/elastic/elasticsearch/pull/17285このため 廃止ログを追加し、私は認識できないタイプが使用されているときに6.0が に例外がスローされます https://github.com/elastic/elasticsearch/pull/22090をオープンしました。

関連する問題