在电子邮件之上构建搜索引擎。 MLT非常擅长查找具有相似机构或主题的电子邮件,但有时我想做的事情是:向我展示与此内容具有相似内容的电子邮件,但仅限于joe@yahoo.com
且仅在此日期范围内。 ES 2.x似乎已经可以实现这一点,但似乎5.x不允许在除了考虑相似性之外的字段上进行过滤。我错过了什么吗?
我仍然无法想象如何做我所描述的。想象一下,为了简单起见,我有两种类型的电子邮件索引:body
和sender
。我现在知道要查找仅限发件人的邮件,发布的查询将类似于:
{
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"term": {
"sender": "mike@foo.com"
}
}
]
}
}
}
}
}
同样,如果我想知道如何使用正文内容查找类似于单个英雄消息的消息,我可以发出如下查询:
{
"query": {
"more_like_this": {
"fields" : ["body"],
"like" : [{
"_index" : "foo",
"_type" : "email",
"_id" : "a1af33b9c3dd436dabc1b7f66746cc8f"
}],
"min_doc_freq" : 2,
"min_word_length" : 2,
"max_query_terms" : 12,
"include" : "true"
}
}
}
这两个查询都通过在根对象的query
子句中添加子句来指定结果。但是,我尝试将这些放在一起的任何方式都给出了解析异常。我找不到任何文件的例子,可以说,给我一些类似于这个英雄的电子邮件,但只能来自mike@foo.com
答案 0 :(得分:0)
您几乎就在那里,您可以使用bool/filter
这样的filter
查询将它们组合在一起,即从{
"query": {
"bool": {
"filter": [
{
"term": {
"sender": "mike@foo.com"
}
},
{
"more_like_this": {
"fields": [
"body"
],
"like": [
{
"_index": "foo",
"_type": "email",
"_id": "a1af33b9c3dd436dabc1b7f66746cc8f"
}
],
"min_doc_freq": 2,
"min_word_length": 2,
"max_query_terms": 12,
"include": "true"
}
}
]
}
}
}
中创建一个数组并将两个约束放在那里:
lt