Elasticsearch数组比较

时间:2017-07-06 13:53:14

标签: elasticsearch

我是弹性搜索的新手,所以要善待。

我正在尝试存储和查询用N个标签标记的数据。我想将搜索查询数组与存储的数组进行比较,并按照哪些项匹配最多标签的顺序返回结果。

数据集示例:

{ name: "karl", tags: ["terrible", "programmer"] }
{ name: "bob", tags: ["awesome", "programmer"] }

查询示例,匹配两个人:

query: { tags: ["programmer"] }
result: [karl, bob]

在这个例子中,两者都被返回但是bob得分很高,因为匹配的标签越来越多, Karl仍然显示,尽管在​​awesome上没有匹配。

query: { tags: ["programmer", "awesome"] }
result: [bob, karl]

我得到的壁橱就是这个,但它似乎没有比卡尔更高的分数

{
  "query": {
    "bool": {
      "should": [
        { "match": { "tags": "programmer" } },
        { "match": { "tags": "awesome" } }
       ],
      "minimum_number_should_match": 1
    }
  }
}

会喜欢一些支持:-) 谢谢!

2 个答案:

答案 0 :(得分:2)

它的得分from sympy.printing.pretty.pretty import PrettyPrinter from sympy.printing.pretty.pretty_symbology import pretty_use_unicode from sympy.printing.pretty.stringpict import prettyForm class MyPrettyPrinter(PrettyPrinter): def _print_float(self, e): return prettyForm('{:.3f}'.format(e)) def mypretty(expr, **settings): """ https://github.com/sympy/sympy/issues/2820 https://github.com/sympy/sympy/blob/70381f282f2d9d039da860e391fe51649df2779d/sympy/printing/pretty/pretty.py#L2598-L2613 """ pp = MyPrettyPrinter(settings) # breakpoint() # XXX: this is an ugly hack, but at least it works use_unicode = pp._settings['use_unicode'] uflag = pretty_use_unicode(use_unicode) try: return pp.doprint(expr) finally: pretty_use_unicode(uflag) init_printing(pretty_printer=mypretty) 确实比bob高: enter image description here

如果您想同时匹配两个标签,请增加karl运算符: enter image description here

与一堆minimum基本上相同:

bool-must

答案 1 :(得分:0)

如果仅需要同时匹配两个(或更多)标记的文档,则需要使用必须查询(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html) 您的查询如下:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "tags": "programmer" } },
        { "match": { "tags": "awesome" } }
       ]
    }
  }
}