【问题标题】:how to do a cumulative array search in elasticsearch?如何在elasticsearch中进行累积数组搜索?
【发布时间】:2014-10-31 09:57:31
【问题描述】:

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

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

“皮裤#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 但它返回了奇怪的结果,并尝试了一个布尔匹配但当我添加数组时什么也没有得到。

任何人可以提供的任何帮助都将被感激地接受。如果您需要更多信息或其他信息,请告诉我?非常感谢您抽出宝贵时间阅读本文。

【问题讨论】:

    标签: arrays elasticsearch hashtag fuzzy-search


    【解决方案1】:

    也许“dis_max”查询可以为您工作。它可以进行多个不同的查询并连接结果。所以她首先查询“hashtags = 'vintage london'”然后是“hashtags = 'vintage'”然后是“hashtags = 'london'”。您还可以在研究数据中添加通配符 (*),例如“hashtags = 'london*'”

    {
    "fields" : ["hashtags", "title"],
    "query" : {
        "dis_max" : {
            "tie_breaker" : 0,
    
            "queries" : [ {
                    "wildcard" : {
                        "hashtags" : "vintage london"
                    }
                }, {
                    "wildcard" : {
                        "hashtags" : "vintage"
                    }
                }, {
                    "wildcard" : {
                        "hashtags" : "london"
                    }
                }
            ]
        }
    },
    "sort" : {
        "_score" : "desc"
    }   }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 2022-11-02
      • 2022-01-24
      相关资源
      最近更新 更多