如何在elasticsearch中进行累积数组搜索?

时间:2014-10-31 09:57:32

标签: arrays elasticsearch hashtag fuzzy-search

我想结合标准文本搜索使用标签搜索。

以下是我希望能够进行的查询:

“皮裤#vintage #london”

所以实际上我想剥离#hashtaged元素并按名称搜索它们,累积意义上。首先,我希望它通过搜索字符串优先匹配完全匹配,然后是具有接近匹配+主题标签的匹配,然后最后通过哈希标记与搜索字符串匹配。

因此,Vintage和London的物品将高于Vintage或London的物品。

这是我的映射

{
  "title" : {   
     "type" : "string",
     "analyzer" : "standard"
     },
  "hashtags" : {
     "properties" : {
          "id" : "integer",
          "name" : "string"
       }
     }
}

所以我想要的查询是

"exact or near match string" + "optional cumulative array match (preferably with fuzzyness)"

或与我的映射相关

"near or exact match on 'title'" + "cumulative array match with fizzyness on hashtag.name"

我尝试过一次模糊匹配,但在清晰度不够的情况下得到了太多的结果。我尝试了一个简单的simple_query_string,但它返回了奇怪的结果,并尝试了一个bool匹配,但在添加数组时什么都没有回来。

任何人都可以提供的任何帮助都将非常感激。如果您需要更多信息或其他什么,请告诉我?非常感谢您花时间阅读本文。

1 个答案:

答案 0 :(得分:0)

也许是" dis_max"查询可以为你工作。它可以生成多个不同的查询并连接结果。因此,她首先询问" hashtags =' vintage london'"然后" hashtags =' vintage'"然后" hashtags ='伦敦'"。您还可以在研究数据中添加通配符(*),例如" hashtags ='伦敦*'"

{
"fields" : ["hashtags", "title"],
"query" : {
    "dis_max" : {
        "tie_breaker" : 0,

        "queries" : [ {
                "wildcard" : {
                    "hashtags" : "vintage london"
                }
            }, {
                "wildcard" : {
                    "hashtags" : "vintage"
                }
            }, {
                "wildcard" : {
                    "hashtags" : "london"
                }
            }
        ]
    }
},
"sort" : {
    "_score" : "desc"
}   }