0

このガイドに従って、この percolate api Java コードを scala に変換していますが、これを SBT で実行すると、次の例外がスローされます

[error] (run-main-0) org.elasticsearch.index.percolator.PercolatorException: [myindex] failed to parse query [myDesignatedQueryName]
org.elasticsearch.index.percolator.PercolatorException: [myindex] failed to parse query [myDesignatedQueryName]
    at org.elasticsearch.index.percolator.PercolatorQueriesRegistry.parsePercolatorDocument(PercolatorQueriesRegistry.java:194)
    at org.elasticsearch.index.percolator.PercolatorQueriesRegistry$RealTimePercolatorOperationListener.preIndex(PercolatorQueriesRegistry.java:309)
    at org.elasticsearch.index.indexing.ShardIndexingService.preIndex(ShardIndexingService.java:139)
    at org.elasticsearch.index.shard.service.InternalIndexShard.index(InternalIndexShard.java:420)
    at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:193)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:511)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:419)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.index.query.QueryParsingException: [myindex] Strict field resolution and no field mapping can be found for the field with name [content]
    at org.elasticsearch.index.query.QueryParseContext.failIfFieldMappingNotFound(QueryParseContext.java:393)
    at org.elasticsearch.index.query.QueryParseContext.smartFieldMappers(QueryParseContext.java:372)
    at org.elasticsearch.index.query.TermQueryParser.parse(TermQueryParser.java:95)
    at org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:277)
    at org.elasticsearch.index.query.IndexQueryParserService.parseInnerQuery(IndexQueryParserService.java:321)
    at org.elasticsearch.index.percolator.PercolatorQueriesRegistry.parseQuery(PercolatorQueriesRegistry.java:207)
    at org.elasticsearch.index.percolator.PercolatorQueriesRegistry.parsePercolatorDocument(PercolatorQueriesRegistry.java:191)
    at org.elasticsearch.index.percolator.PercolatorQueriesRegistry$RealTimePercolatorOperationListener.preIndex(PercolatorQueriesRegistry.java:309)
    at org.elasticsearch.index.indexing.ShardIndexingService.preIndex(ShardIndexingService.java:139)
    at org.elasticsearch.index.shard.service.InternalIndexShard.index(InternalIndexShard.java:420)
    at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:193)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:511)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:419)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
[trace] Stack trace suppressed: run last compile:run for the full output.

ここに私のコードがあります

object PercolateApiES extends App{
  val node =nodeBuilder().client(true).node()
val client =node.client()

  val qb=QueryBuilders.termQuery("content","amazing")

val res=client.prepareIndex("myindex", ".percolator", "myDesignatedQueryName")
    .setSource(jsonBuilder()
        .startObject()
            .field("query", qb) // Register the query
        .endObject())
    .setRefresh(true) // Needed when the query shall be available immediately
    .execute().actionGet();
val docBuilder = XContentFactory.jsonBuilder().startObject();
docBuilder.field("doc").startObject(); //This is needed to designate the document
docBuilder.field("content", "This is amazing!");
docBuilder.endObject(); //End of the doc field
docBuilder.endObject(); //End of the JSON root object
//Percolate
val response = client.preparePercolate()
                        .setIndices("myindex")
                        .setDocumentType("myDocumentType")
                        .setSource(docBuilder).execute().actionGet();
node.close
}

curl を使用してこれらのコマンドを記述すると、正常に動作します

curl -XPUT 'localhost:9200/myindex1' -d '{
  "mappings": {
    "mytype": {
      "properties": {
        "content": {
          "type": "string"
        }
      }
    }
  }
}'

{"acknowledged":true}

curl -XPUT 'localhost:9200/myindex1/.percolator/myDesignatedQueryName' -d '{
    "query" : {
        "term" : {
            "content" : "amazing"
        }
    }
}'


{"_index":"myindex1","_type":".percolator","_id":"myDesignatedQueryName","_version":1,"created":true}

curl -XGET 'localhost:9200/myindex1/content/_percolate' -d '{
    "doc" : {
        "content" : "This is amazing!"
    }
}'

{"took":231,"_shards":{"total":5,"successful":5,"failed":0},"total":1,"matches":[{"_index":"myindex1","_id":"myDesignatedQueryName"}]}

私はelastic search-1.4.1を使用しています。コードでこれを行う方法がわからないので、間違いを犯している場所を助けてください。また、結果を確認したい

matches":[{"_index":"myindex1","_id":"myDesignatedQueryName"}

どうすれば結果を取得できますか、助けてください、私を導いてください、ありがとう

4

1 に答える 1

0

ES 1.4.0.Beta1 では、パーコレーター API に影響を与える重大な変更が導入されました。基本的に、index.query.parse.allow_unmapped_fields明示的に をに設定する必要がありtrueます。詳細については、 http: //www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-dynamic-mapping.html#_unmapped_fields_in_queries を参照してください。

この変更の追加に関する実際の会話は、Github https://github.com/elasticsearch/elasticsearch/issues/6664にあります。

別の関連する問題があります: index.query.parse.allow_unmapped_fields 設定では、エイリアス フィルターでマップされていないフィールドが許可されていないようです。

于 2014-12-22T05:21:35.973 に答える