0

我最近在 Wikipedia river 中安装了 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"
        }
      }
    }
  }
}
4

1 回答 1

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
                        }
                    }
                ]
            }
        }
    }
}
' 
于 2013-08-27T15:34:25.753 回答