以下是我的Map:
def searchkick_index
{
settings: {
# Custom settings if needed
},
mappings: {
properties: {
inventoryindex: { type: 'keyword' },
codebook3index: { type: 'keyword' },
warehouseindex: { type: 'keyword' },
rackno: { type: 'keyword' },
qty: { type: 'integer' },
unitsize: { type: 'integer' },
secno: { type: 'keyword' },
deleteflag: { type: 'boolean' },
productindex: { type: 'keyword' },
fullunit: { type: 'keyword' },
site: { type: 'keyword' },
lab_hold: { type: 'boolean' },
arrivaldate: { type: 'date' },
qccleared: { type: 'boolean' },
lotno: { type: 'keyword' },
recordtime: { type: 'date' },
rcvdunitsize: { type: 'integer' },
product: {
type: 'nested',
properties: {
productindex: { type: 'keyword' },
productcode: { type: 'keyword' },
productdesc: { type: 'text' }
}
}
}
}
}
end
这是我的查询,它工作得很好:
"query": {
"bool": {
"must": [
{ "match": { "deleteflag": false } },
{ "match": { "lotno": "123003001*" } }
]
}
}
但是如果我想像下面这样通过product.prodoctcode
进行过滤,结果是空的,我不确定我在这里做错了什么。
"query": {
"bool": {
"must": [
{ "match": { "deleteflag": false } },
{ "match": { "lotno": "123003001*" } },
{ "match": { "product.productcode": "20381ONPW" } }
]
}
}
我在Ruby on Rails应用程序中使用了Searchkick gem
,我在模型中的Map如下:
def search_data
{
inventoryindex: inventoryindex,
codebook3index: codebook3index,
warehouseindex: warehouseindex,
rackno: rackno,
qty: qty,
unitsize: unitsize,
secno: secno,
deleteflag: deleteflag,
productindex: productindex,
fullunit: fullunit,
site: site,
lab_hold: lab_hold,
arrivaldate: arrivaldate,
qccleared: qccleared,
lotno: lotno,
recordtime: recordtime,
rcvdunitsize: rcvdunitsize,
product: [
{
productindex: product.productindex,
productcode: product.productcode,
productdesc: product.productdesc
}
]
}
end
1条答案
按热度按时间qcuzuvrc1#
嵌套字段被索引为单独的隐藏文档,因此需要特殊的查询来搜索它们。这里有三种可能的解决方案。
1.您不仅可以将嵌套字段索引为隐藏文档,还可以将其索引为父文档的一部分。为此,在嵌套字段Map中设置
include_in_parent
或include_in_root
。在这种情况下,您的搜索将按原样工作,但实际上您将对该字段进行两次索引。1.你可以保持Map不变,使用特殊的nested query代替最后的
match
:1.如果您不打算同时按产品代码、索引和描述进行搜索(例如,查找至少一个产品同时具有索引“ABC”和描述“XYZ”的所有记录),则可以将产品从嵌套转换为对象。在继续之前,请确保您完全了解此解决方案与嵌套解决方案相比的局限性。