我经营一个摄影网站。摄影师将其“ by_line”作为“ Some name / ourwebsite.com”。
我有一个用于大多数查询的DSL,使用“条件”将“过滤”查询串在一起,这在90%的情况下都非常有效,但是在这种情况下,我通过这样的查询返回的结果为零(请注意我如何尝试逃脱正斜线):
body:
{query:
{filtered:
{filter:
{and:
[{term: {is_visible: true}},
{term: {"event.by_line": "john\\/my_website.com"}}]
}
}
}
}
我正在使用Elasticsearch 1.5.2版
当我查看此URL的映射时
http://127.0.0.1:9200/development_photos/_mapping?pretty=1
这是一个示例记录
{
"_index" : "development_photos",
"_type" : "photo",
"_id" : "251",
"_score" : 1.0,
"_source":{"id":251,
"name":"LET'S PANIC ISSUE 02 LAUNCH DINNER",
"image":"BFA_85_251.jpg",
"position":null,
"event_id":85,
"created_at":"2015-06-21T22:27:21.000Z",
"is_visible":true,
"img":{"thumb":"thumb.png"}
,"ppl":[{"id":429,"position":20,"person_name":"John Kealy","person_slug":"john-kealy","person_id":30}],
"keywords":[],
"event":{"id":85,
"state":"New York",
"time_created":"8:00 PM",
"date_created":"20150611",
"city":"New York",
"caption":"Let's Panic-mosphere",
"by_line":"John Kealy/BFA.com",
"name":"LET'S PANIC ISSUE 02 LAUNCH DINNER",
"zip_processing":null
}
}
}
和映射
{
"development_photos" : {
"mappings" : {
"photo" : {
"properties" : {
"created_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"event" : {
"properties" : {
"abstract" : {
"type" : "string"
},
"author" : {
"type" : "string"
},
"by_line" : {
"type" : "string"
},
"caption" : {
"type" : "string"
},
"city" : {
"type" : "string"
},
"copyright_notice" : {
"type" : "string"
},
"country_primary_location_name" : {
"type" : "string"
},
"cover_photo_id" : {
"type" : "long"
},
"created_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"date_created" : {
"type" : "string"
},
"folder" : {
"type" : "string"
},
"id" : {
"type" : "long"
},
"is_private" : {
"type" : "boolean"
},
"make_public_on" : {
"type" : "string"
},
"name" : {
"type" : "string"
},
"password" : {
"type" : "string"
},
"position" : {
"type" : "long"
},
"pr_usage" : {
"type" : "boolean"
},
"province" : {
"type" : "string"
},
"purchases_disabled" : {
"type" : "boolean"
},
"state" : {
"type" : "string"
},
"sub_location" : {
"type" : "string"
},
"time_created" : {
"type" : "string"
},
"updated_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"uploader_id" : {
"type" : "long"
},
"view_only_password" : {
"type" : "string"
}
}
},
"event_id" : {
"type" : "long"
},
"id" : {
"type" : "long"
},
"image" : {
"type" : "string"
},
"img" : {
"properties" : {
"preview" : {
"type" : "string"
},
"thumb" : {
"type" : "string"
},
"thumb_rollover" : {
"type" : "string"
}
}
},
"is_visible" : {
"type" : "boolean"
},
"keywords" : {
"properties" : {
"id" : {
"type" : "long"
},
"name" : {
"type" : "string"
},
"tag_id" : {
"type" : "long"
}
}
},
"name" : {
"type" : "string"
},
"position" : {
"type" : "long"
},
"ppl" : {
"properties" : {
"id" : {
"type" : "long"
},
"person_id" : {
"type" : "long"
},
"person_name" : {
"type" : "string"
},
"person_slug" : {
"type" : "string"
},
"position" : {
"type" : "long"
}
}
}
}
}
}
}
}
根据bittusarkar的建议,我将查询更新为使用fquery。现在我还有两个问题。如何链接fquery查询?
这将导致elasticsearch失败
{filtered:
{filter:
{and:
[{term:{is_visible:true}},
{term:{is_private:false}}],
fquery:
{query:
{match:
{by_line:"Kealy/BFAnyc",
sub_location:"can i chain these queries"}}}}}}
这将导致错误“查询以简化的形式解析,具有直接的字段名称,但除字段名称之外还包含更多选项,可能使用带有’query’元素的’options’形式?”。
此外,当我尝试将fquery与仅链接“ and”过滤器的旧方法混合使用时,它返回的结果不应该。.看来它忽略了“ and”查询。例如:
{filtered:
{filter:
{and:
[{term: {is_visible:true}},
{term: {is_private: false}},
{term: {sub_location: "can"}},
{term: {sub_location: "i"}},
{term: {sub_location: "chain"}},
{term: {sub_location: "these"}},
{term: {sub_location: "queries"}}],
fquery:
{query:
{match:
{by_line:JohnKealy/BFAnyc"}}}}}}
这样的记录出现在搜索结果中:(请注意“ sub_location与我的sub_location查询不匹配)
{event: {"id":1,
"sub_location":"New York",
"state":nil,
"author":nil,
"copyright_notice":nil,
"country_primary_location_name":nil,
"time_created":nil,
"date_created":nil,
"city":nil,
"caption":nil,
"by_line":"JohnKealy/BFAnyc",
"abstract":nil,
"name":"John Kealy",
"province":nil,
"folder":"foo",
"password":nil,
"visible":nil,
"zip_created_at":nil,
"zip_processing":nil,
"position":0,
"pdf":nil,
"cover_photo_id":nil,
"created_at":"2015-07-16T15:53:26.000Z",
"updated_at":"2015-07-16T15:53:26.000Z",
"is_private":false,
"price_mod":nil,
"uploader_id":nil,
"view_only_password":nil,
"pr_usage":nil,
"purchases_disabled":nil,
"make_public_on":nil}}
从您的映射看来,您正在使用默认的分析器作为by_line
字段。这意味着将值“ John Kealy / BFA.com”分别索引为以下术语-“
john”,“ kealy”,“ bfa”和“ com”。现在term
查询适用于未分析的字段。它正在搜索完整的术语“ John Kealy /
BFA.com”,该术语当然不会出现在倒排索引中。您需要使用match
查询而不是term
这里的查询,如下所示:
{
"query": {
"match": {
"by_line": "John Kealy/BFA.com"
}
}
}
如果要使其成为过滤器的一部分,可以使用fquery
以下方法:
{
"filter": {
"fquery": {
"query": {
"match": {
"by_line": "John Kealy/BFA.com"
}
},
"_cache": true
}
}
}
我需要在URL中包含一个斜线来访问RabbitMQ API,并且我正在尝试使用获取数据: 当我将替换为时,我可以在请求描述符中看到已更改为,因此我得到了未找到的响应。 我尝试了以下选项: •-WebClient更改为,Rabbit返回404。 如何使用WebClient将保存在url中?
问题内容: 我正在尝试将输出输出为\ a \ b \ c。上面的错误可能是因为我无法转义\字符。 问题答案: 您无需转义反斜杠(仅使用内部单引号):
问题内容: 我从Instagram提取JSON: 然后将变量解析为PHP数组以重组数据,然后重新编码和缓存文件: 当我打开缓存文件时,我所有的正斜杠“ /”都被转义了: 我从搜索中收集到自动执行此操作…是否可以禁用它? 问题答案: 有没有办法禁用它? 是的,您只需要使用该标志。 重要的 阅读之前:https : //stackoverflow.com/a/10210367/367456(知道你在做
问题内容: 谁能告诉我在Java中如何使用正斜杠转义字符。我知道反斜杠是\ \,但是我尝试了\ /和/ /却没有运气! 这是我的代码: 提前致谢! 问题答案: 您既不需要以Java语言或正则表达式来转义正斜杠。 还要注意这样的块: 更紧凑和可读地写为: 因此,对于您而言,我相信您的方法应类似于: 请注意,这不是测试有效日期的一种非常好的方法-可能也应该尝试将其解析 为 日期,或者将其解析 为 日期
问题内容: 我需要使用JSON发送日期。日期字符串应如下所示: “ 2013/5/15” 而是按以下方式对其进行转义: “ 2013 \ / 5 \ / 15” 我知道这样做是为了允许在scripts标记内包含json字符串,因为此问题解释了: JSON:为什么要转义正斜杠? 但就我而言,我不需要它。实际上,服务器正在返回错误。服务器没有处理此问题,因此我无法修复该服务器,因此必须在移动客户端代码
问题内容: 这样做的原因是“逃脱了”我。 JSON转义为正斜杠,因此哈希序列化为而不是。 为什么? 问题答案: JSON不需要您执行此操作,而是允许您执行此操作。它还允许您将“ \ u0061”用于“ A”,但这不是必需的。在将JSON嵌入标记中时允许帮助,该标记不允许内部字符串出现,如Seb指出的那样。 Microsoft的一些ASP.NET Ajax / JSON API使用此漏洞来添加额外的