![](/img/trans.png)
[英]Faceted search: ElasticSearch/Solr or a simple database query?
[英]Fixing a Simple Elasticsearch Query
我有以下數據:
{
"results":[
{
"ID":"1",
"products":[
{
"product":"car",
"number":"5"
},
{
"product":"computer",
"number":"212"
}
]
},
{
"ID":"2",
"products":[
{
"product":"car",
"number":"9"
},
{
"product":"computer",
"number":"463"
},
{
"product":"bicycle",
"number":"5"
}
]
}
]
}
我的查詢如下:
{
"query":{
"bool":{
"must":[
{
"wildcard":{
"results.products.product":"*car*"
}
},
{
"wildcard":{
"results.products.number":"*5*"
}
}
]
}
}
}
我期望只獲得ID1。 因為它只有一個產品{{product“:”car“,”number“:”5“}記錄。 但我得到的是ID1和ID2,因為ID2的第一個記錄有“產品”:“汽車”和第三個記錄分別有“數字”:“5”記錄。
我該如何修復此查詢?
創建映射時,需要將產品定義為嵌套類型 。 嘗試使用以下映射示例:
PUT http://localhost:9200/indexname
{
"mappings": {
"typename": {
"properties": {
"products" : {
"type" : "nested"
}
}
}
}
}
然后,您可以使用嵌套查詢來匹配數組的整個元素 - 就像您需要的那樣。
{
"query": {
"nested": {
"path": "products",
"query": {
"bool": {
"must": [
{ "wildcard": { "products.product": "*car*" }},
{ "wildcard": { "products.number": "*5*" }}
]
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.