从查询字符串中提取匹配条件

时间:2015-06-01 09:46:39

标签: elasticsearch nest

ElasticSearch Query是使用带有多个AND / OR运算符的查询字符串形成的。即((条件1或条件2)和(条件3或条件4或条件5)),根据条件,它为我提供了多个文件。为了获得准确的条件,我再次循环遍历所有结果文档并标记特定条件。有没有简单的方法来获得特定于文档的结果条件?

任何人都可以使用NEST API提供更好的示例吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要的是突出显示对查询产生影响的数据。 elasticsearch的高亮功能实际上标记了每个搜索结果中的文本,因此用户可以看到文档与查询匹配的原因。标记的文本将在响应中返回。

请参阅elasticsearch documentation以了解此API实际如何运作。请参阅Nest Documentation以了解如何使用Nest库实现它。

例如,使用elasticsearch api想象下面的例子:

GET /someIndex/someType/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

与Nest相同:

var result = _client.Search<someIndex>(s => s
    .Query(q => q
        .MatchPhrase(qs => qs
            .OnField(e => e.about)
            .Query("rock climbing")
        )
    )
    .Highlight(h => h
        .OnFields(f => f
            .OnField(e => e.about)
        )
    )
);

对于每个搜索结果,响应将采用以下形式(请注意突出显示部分)

"_score": 0.23013961,
"_source": {
   "first_name":  "John",
   "last_name":   "Smith",
   "age":         25,
   "about":       "I love to go rock climbing",
   "interests": [ "sports", "music" ]
},
"highlight": {
   "about": [
      "I love to go <em>rock</em> <em>climbing</em>" 
   ]
}