假设我有3个医生
doc_1 = {
"citedIn": [
"Bar Councils Act, 1926 - Section 15",
"Contract Act, 1872 - Section 23"
]
}
doc_2 = {
"citedIn":[
"15 C. B 400",
"Contract Act, 1872 - Section 55"
]
}
doc_3 = {
"citedIn":[
"15 C. B 400",
"Contract Act, 1872 - Section 15"
]
}
在这里 citedIn
字段是数组对象。现在我要运行一个stander match
查询
{
"query":
{
"match": {"citedIn":{"query": "Contract act 15" , "operator":"and" }}
}
}
上面的查询返回了3个文档的全部内容,但它假设返回 doc_3
仅作为 doc_3
包含 Contract
, act
以及 15
在单个数组元素中。
我该如何做到这一点?
最好有任何建议/解决方案
嵌套数据类型更新:
我试过嵌套字段。这是我的Map
{
"mappings": {
"properties": {
"citedIn": {
"type": "nested",
"include_in_parent": true,
"properties": {
"someFiled": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
这是我的数据
doc_1 = {
"citedIn": [
{"someFiled" : "Bar Councils Act, 1926 - Section 15"},
{"someFiled" : "Contract Act, 1872 - Section 23"}
]
}
doc_2 = {
"citedIn":[
{"someFiled" : "15 C. B 400"}
{"someFiled" : "Contract Act, 1872 - Section 55"}
]
}
doc_3 = {
"citedIn":[
{"someFiled" : "15 C. B 400"},
{"someFiled" : "Contract Act, 1872 - Section 15"}
]
}
这是我的问题
{
"query":
{
"match": {"citedIn.someFiled":{"query": "Contract act 15" , "operator":"and" }}
}
}
但仍然得到同样的结果
2条答案
按热度按时间ar7v8xwq1#
添加索引数据、Map、搜索查询和搜索结果的工作示例。
您需要使用嵌套查询来搜索嵌套字段
索引Map
索引数据:
搜索查询:
搜索结果:
bbuxkriu2#
你没有办法做到这一点,因为你正在索引的是一个数组字符串在你的
citedIn
字段,因为所有elasticsearch字段都默认为多值字段,因为它是在lucene中以这种方式设计的,elasticsearch构建在lucene搜索库之上。请阅读elasticsearch中的数组以获取更多信息,尤其是最后一个重要注解,如下图所示:
如上图所述,数组中的所有字符串实际上都是同一字段的一部分,因此es无法确定搜索字符串是否是数组中同一字符串的一部分,因此您将获得搜索中的所有文档。
除非将这些字符串作为其他字段的一部分进行索引,如
nested
字段,但为此您需要给出字段的名称,它就像一个Map,其中键是您的字段名,值是字段值,而不是查询字段名,您将无法实现您的用例。