我的文档索引如下:
{
title: "stuff here",
description: "stuff here",
keywords: "stuff here",
score1: "number here",
score2: "number here"
}
我想执行一个查询:
编辑:我尝试了这个查询,但它确实有效。有人可以确认这是否是正确的方法吗?感谢。
{
query:{
'multi_match':{
'query': q,
'fields': ['title^2','description', 'keywords'],
}
}
}
答案 0 :(得分:2)
你的方式绝对是要走的路!
multi_match查询通常是您要向最终用户公开的查询,而query_string类似,但由于它公开了lucene query syntax,因此也更加强大和危险。经验法则:如果您不需要,请不要使用查询字符串。
此外,只需提供您要搜索的字段列表就可以轻松搜索多个字段,而无需bool query。
答案 1 :(得分:0)
以下是将创建您可以使用的查询的代码。我在 c#中写了它,但它也可以用其他语言工作。
您需要做的是创建 BooleanQuery 并设置其条件中至少有一个必须匹配。然后使用 Occur.SHOULD 枚举值为要检查的每个文档字段添加条件:
BooleanQuery searchQuery = new BooleanQuery();
searchQuery.SetMinimumNumberShouldMatch(1);
QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "title", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query titleQuery = parser.Parse("I have a big nose");
searchQuery.Add(titleQuery, BooleanClause.Occur.SHOULD);
parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "description", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query descriptionQuery = parser.Parse("I have a big nose");
searchQuery.Add(titleQuery, BooleanClause.Occur.SHOULD);
parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "keywords", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query keywordsQuery = parser.Parse("I have a big nose");
searchQuery.Add(titleQuery, BooleanClause.Occur.SHOULD);
Query queryThatShouldBeExecuted.Add(searchQuery, BooleanClause.Occur.MUST);
中示例的链接
答案 2 :(得分:0)
执行HTTP Post请求的相应JSON对象是:
{
"bool": {
"should": [
{
"query_string": {
"query": "I have a big nose",
"default_field": "title"
}
},
{
"query_string": {
"query": "I have a big nose",
"default_field": "description"
}
},
{
"query_string": {
"query": "I have a big nose",
"default_field": "keywords"
}
}
],
"minimum_number_should_match": 1,
"boost": 1
}
}