为什么这个简单的弹性搜索查询什么都不返回?

时间:2016-10-30 08:24:23

标签: elasticsearch

我想在我的数据库中搜索一个URL。我有这样的文件:

    {
        "_index": "test",
        "_type": "medhelp",
        "_id": "AVgPTB_dMXsxewkUBUNN",
        "_score": 1,
        "_source": {
            "title": "Pump minimed 404sp, 506,507,508",
            "text": "",
            "abstract": "\n            I am looking to buy one of these pump for testing purpose. It need to be in working condition. Email me if you have one for sale ***@****\n        ",
            "answers": [],
            "source": "medhelp",
            "link": "/posts/Diabetes---Type-1/Pump-minimed-404sp--506-507-508/show/2431714"
        }

当我搜索这样的来源时,我可以得到我的结果:

{
    "query": {
        "prefix": {
            "source": "medhelp"
        }
    }
}

但是当我尝试对带有URL的“链接”字段执行相同操作时,始终没有返回任何内容。这有什么问题:

{
    "query": {
        "prefix": {
            "link": "/posts/Diabetes---Type-1/Pump-minimed-404sp--506-507-508/show/2431714"
        }
    }
}

这是上述查询的结果:

{
    "took": 5,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}

1 个答案:

答案 0 :(得分:1)

我猜你使用默认"标准"分析器的价值为" link"不是作为一个整体对待,而是作为许多小块。

所以答案是使用"关键字"分析器为你的"链接"字段。

如何实现它的示例在以下代码中(您可以使用Sense插件一次执行一条指令到Chrome浏览器)。

最重要的是" analyzer:keyword" for" link"场映射。 如果您删除此行,您将完全符合您的情况。

DELETE /test123
PUT /test123
{
      "mappings": {
          "medhelp" : {
              "properties": { 
                "link": { "type": "string"
                ,"analyzer": "keyword"
                },
                "source": { "type": "string"}
        }
    }
    }
}

GET /test123/_mapping

PUT /test123/medhelp/1
{
    "link":"/posts/Diabetes---Type-1/Pump-minimed-404sp--506-507-508/show/2431714",
    "source":"medhelp"
}

GET /test123/_search
{
    "query": {
        "prefix": {
            "link": "/posts/Diabetes---Type-1/Pump-minimed-404sp--506-507-508/show/2431714"
        }
    }
}