0

私はElasticSearchを使用するアプリケーションを開発していますが、場合によっては、用語やロケールに応じて検索したいと思います。ローカルホストでこれをテストしています

http://localhost:9200/index/type/_search

およびパラメータ

query : {
                        wildcard : { "term" : "myterm*" }
                    },
                    filter : {
                        and : [
                            {
                                term : { "lang" : "en" }
                            },
                            {
                                term : { "translations.lang" : "tr" } //this is subdocument search
                            },
                        ]
                    }

サンプルドキュメントは次のとおりです。

{
    "_index": "twitter",
    "_type": "tweet",
    "_id": "5084151d2c6e5d5b11000008",
    "_score": null,
    "_source": {
      "lang": "en",
      "term": "photograph",
      "translations": [
        {
          "_id": "5084151d2c6e5d5b11000009",
          "lang": "tr",
          "translation": "fotoğraf",
          "score": "0",
          "createDate": "2012-10-21T15:30:37.994Z",
          "author": "anonymous"
        },
        {
          "_id": "50850346532b865c2000000a",
          "lang": "tr",
          "translation": "resim",
          "score": "0",
          "createDate": "2012-10-22T08:26:46.670Z",
          "author": "anonymous"
        }
      ],
      "author": "anonymous",
      "createDate": "2012-10-21T15:30:37.994Z"
    }
  }

入力言語が「en」、出力言語が「tr」のワイルドカード(オートコンプリート用)で用語を取得しようとしています。「myterm」はあるが適用されない用語を取得しており、これを操作しています。任意の提案をいただければ幸いです

前もって感謝します

4

2 に答える 2

2

translations要素にはnestedタイプがあると思います。この場合、ネストされたクエリを使用する必要があります。

curl -XPOST "http://localhost:9200/twitter/tweet/_search" -d '{
    query: {
        wildcard: {
            "term": "term*"
        }
    },
    filter: {
        and: [{
            term: {
                "lang": "en"
            }
        }, {
            "nested": {
                "path": "translations",
                "query": {
                    "term" : { "translations.lang" : "tr" }
                }
            }
        }]
    }
}'
于 2012-10-22T19:50:09.653 に答える
1

次のクエリで問題を解決できました。

query : {
   wildcard : { "term" : "myterm*" }
},
filter : {
   and : [
      {
         term : { "lang" : "en" }
      },
      {
         term : { "translations.lang" : "tr" } //this is subdocument search
      }
   ]
},
sort : {
   {"term" : "desc"}
}

ここで重要な点は、ソート フィールドを not_analyzed に設定する必要があることです。したがって、分析されたフィールドをソートすることはできません。

于 2012-10-30T07:12:18.717 に答える