我是弹性搜索的新手,所以要善待。
我正在尝试存储和查询用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
}
}
}
会喜欢一些支持:-) 谢谢!
答案 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
高:
与一堆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" } }
]
}
}
}