我想在我的数据库中搜索一个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": []
}
}
答案 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"
}
}
}