申し訳ありませんが、クエリが混乱することができElasticSearch ...ElasticSearchの複数のフィールドに必要なboolクエリを作成するにはどうすればよいですか?
目標: Googleの検索クエリと同じように動作クエリを作成します。より多くの単語を入力すると、得られる一致する結果が少なくなります。例えば、「四川のソース」は「ムラン四川のソース」よりも多くの結果をもたらします。 私のインデックスには、ブログの投稿のタイプがあります。フィールドには、 "title"、 "tags"、 "categories"というフィールドがあります。 ElasticSearchは、クエリのすべての単語に一致するすべてのドキュメントを検索する必要があります。単語はすべてのフィールドに広げられます。たとえば、文書のタイトルに "mulan"が含まれている場合、そのタグには "四川"が含まれ、カテゴリには "ソース"が含まれています。
私はさまざまなboolクエリを試しましたが、 "must"を使用しても結果にはすべてのクエリワードと一致しないドキュメントが含まれています。私が試し例えば
:
String queryString = "mulan szechuan sauce";
QueryBuilder titleMatchQuery = QueryBuilders.matchQuery("title", queryString);
QueryBuilder tagsMatchQuery = QueryBuilders.matchQuery("tags", queryString);
QueryBuilder categoryMatchQuery = QueryBuilders.matchQuery("categories", queryString);
QueryBuilder combinedBoolQuery = QueryBuilders.boolQuery()
.must(titleMatchQuery)
.must(tagsMatchQuery)
.must(categoryMatchQuery);
これはコンパイルに:
{
"bool" : {
"must" : [ {
"match" : {
"title" : {
"query" : "mulan szechuan sauce",
"type" : "boolean"
}
}
}, {
"match" : {
"tags" : {
"query" : "mulan szechuan sauce",
"type" : "boolean"
}
}
}, {
"match" : {
"categories" : {
"query" : "mulan szechuan sauce",
"type" : "boolean"
}
}
} ]
}
}
としては、これは、クエリからのすべての単語が含まれていないために結果生じ、言った: -/
ありがとうございますが、これは必要に応じて動作しません。まだすべての単語を含んでいない結果があります。 – rapstacke
あなたの追加されたリンクは答えをもたらしました:D - この作業をするには、AND演算子を追加する必要があります。 Javaの場合:QueryBuilders.multiMatchQuery(queryString、 "title"、 "tags"、 "category")。演算子(MatchQueryBuilder.Operator.AND) – rapstacke
喜んで助けてくれました! – Val