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

match针对您的标题字段运行多个查询,将它们与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"
               }
            }
         ]
      }
   }
}
'

当然,match查询将匹配其字段包含查询字符串中的一个单词的任何书籍title,因此您可能希望使用match_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 回答