要搜索嵌套(或不嵌套)查詢的相鄰詞,解決方案如下(答案見這里):
{
"查詢"。{
"bool": {
"必須"。[
{
"嵌套"。{
"路徑"。"metadata",
"查詢": {
"bool": {
"必須"。[
{
"通配符"。{
"metadata.text": "*antonio*"
}
},
{
"通配符": {
"metadata.text": "*banderas*"
}
}
]
}
}
}
}
]
}
}
}
這樣做是可以的。但是,應該有多個嵌套欄位,在其中以同樣的方式搜索*antonio* *banderas*,讓我們說現在我們有這樣的映射:
{
"mappings:": {
"屬性"。{
"文本": {
"型別": "文本"
},
"metadata": {
"型別": "嵌套",
"屬性": {
"文本": {
"型別": "文本"
}
}
},
"other_metadata": {
"型別": "嵌套",
"屬性": {
"文本": {
"型別": "文本"
}
}
}
}
}
}
如果我想在兩個嵌套欄位metadata和other_metadata中搜索相鄰的詞,我應該使用match還是should?
我想得到一個與至少一個模式metadata或other_metadata相匹配的結果,所以我想使用should,并將minimum_should_match設定為查詢的標記數(用s-空格符分隔),方法是:
{
"應該"。[{
"嵌套"。{
"路徑": "metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"metadata.text": "*antonio*"
}
}
}
},
"ignore_unmapped": true
}
},
{
"嵌套"。{
"路徑": "metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"metadata.text": "*banderas*"
}
}
}
},
"ignore_unmapped": true
}
},
{
"嵌套"。{
"path": "other_metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"other_metadata.text": "*antonio*"
}
}
}
},
"ignore_unmapped": true
}
},
{
"嵌套"。{
"path": "other_metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"other_metadata.text": "*banderas*"
}
}
}
},
"ignore_unmapped": true
}
}
],
"minimum_should_match": 2
}
這似乎是可行的,但我的疑問是:這里的minimum_should_match=2條件將保證這四個條件中至少有兩個是匹配的,但不保證這兩個匹配條件都與同一個模式相關(比如metadata的兩個詞*antonio*和*banderas*。如果是這樣,如何確保?也許使用must?但是如何呢?
uj5u.com熱心網友回復:
你可以做這樣的子查詢 :
bool => should => bool => filter/must/should
{
"查詢"。{
"bool": {
"minimum_should_match": 1,
"應該": [
{
"bool": {
"必須"。[
{
"嵌套"。{
"ignore_unmapped": true,
"路徑": "metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"metadata.text": "*antonio*"
}
}
}
}
}
},
{
"嵌套"。{
"ignore_unmapped": true,
"路徑": "metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"metadata.text": "*banderas*"
}
}
}
}
}
}
}
},
{
"bool": {
"必須"。[
{
"嵌套"。{
"ignore_unmapped": true,
"path": "other_metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"other_metadata.text": "*antonio*"
}
}
}
}
}
},
{
"嵌套"。{
"ignore_unmapped": true,
"路徑": "other_metadata",
"查詢": {
"bool": {
"必須"。{
"通配符"。{
"other_metadata.text": "*banderas*"
}
}
}
}
}
}
}
}
]
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315413.html
標籤:
