如何使用GET过滤ElasticSearch中的字段

时间:2013-08-27 14:56:25

标签: elasticsearch wikipedia

我最近在维基百科河上安装了ElasticSearch,因为我正在开发一个带文章标题的自动完成框。我一直在试图找出查询数据集的最佳方法。以下作品:

/wikipedia/_search?q=mysearch&fields=title,redirect&size=20

但我想在搜索中添加更多限制:

disambiguation=false, redirect=false, stub=false, special=false

我是ElasticSearch的新手,文档还没有让我走得太远。根据我的阅读,我需要一个过滤的查询;有没有办法从GET请求中做到这一点?这将使我的特定用例更容易。如果没有,POST请求将如何显示?提前谢谢。

作为参考,映射是:

{
  "wikipedia": {
    "page": {
      "properties": {
        "category": {
          "type": "string"
        },
        "disambiguation": {
          "type": "boolean"
        },
        "link": {
          "type": "string"
        },
        "redirect": {
          "type": "boolean"
        },
        "special": {
          "type": "boolean"
        },
        "stub": {
          "type": "boolean"
        },
        "text": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

要添加更多约束,您可以继续使用lucene语法并执行以下操作:

/wikipedia/_search?q=mysearch AND disambiguation:false AND redirect:false AND stub:false AND special:false&fields=title,redirect&size=20

为了提高性能,您可以使用json API使用过滤器,查询将如下所示:

curl -XGET 'http://localhost:9200/wikipedia/_search?pretty=true' -d '
{
    "from" : 0,
    "size" : 20,
    "query":{
        "filtered" : {
            "query" : {
                "text" : { "title" : "test" }
            },
            "filter" : {
                "and": [
                    {
                        "term" : {
                            "stub" : false
                        }
                    },
                    {
                        "term" : {
                            "disambiguation" : false
                        }
                    },
                    {
                        "term" : {
                            "redirect" : false
                        }
                    },
                    {
                        "term" : {
                            "special" : false
                        }
                    }
                ]
            }
        }
    }
}
'