0

本のタイトルのリストがあり、インデックスに存在するタイトルを見つけたいとします。

マッピングは次のとおりです。

"book": {
    "properties": {
                  "title":{"type":"string"}, 
                  "author":{"type":"string"}}}

私はそれぞれを繰り返してチェックすることができました

curl -XPOST 'localhost:9200/myindex/book/_search' 
-d '{"query":{"match":{"title":"my title"}}}

しかし、私が長いタイトルのリストを想定すると、どうすればこれをまとめて実行し、どのタイトルがヒットしたかのリストを取得できますか?

4

1 に答える 1

0

matchtitle フィールドに対していくつかのクエリを実行し、それらをboolクエリと組み合わせます。

curl -XGET 'http://127.0.0.1:9200/myindex/book/_search?pretty=1'  -d '
{
   "query" : {
      "bool" : {
         "should" : [
            {
               "match" : {
                  "title" : "Title one"
               }
            },
            {
               "match" : {
                  "title" : "Title two"
               }
            },
            {
               "match" : {
                  "title" : "Title three"
               }
            }
         ]
      }
   }
}
'

もちろん、クエリは、クエリ文字列に 1 つの単語を含むフィールドmatchを持つすべての書籍に一致するため、代わりに次のように使用することをお勧めします。titlematch_phrase

curl -XGET 'http://127.0.0.1:9200/myindex/book/_search?pretty=1'  -d '
{
   "query" : {
      "bool" : {
         "should" : [
            {
               "match_phrase" : {
                  "title" : "Title one"
               }
            },
            {
               "match_phrase" : {
                  "title" : "Title two"
               }
            },
            {
               "match_phrase" : {
                  "title" : "Title three"
               }
            }
         ]
      }
   }
}
'

これにより、正確なフレーズ、つまり同じ単語が同じ順序で検索されます。

于 2013-03-18T18:57:17.733 に答える