[英]How can I build a compound query with SearchBox in searchkit?
我正在使用searchkit嘗試構建基本的文本搜索。 我認為我要構建的查詢非常簡單。 它需要這樣的結構:
{
"query":{
"bool":{
"must":[
{
"multi_match":{
"query":"test search",
"type":"phrase_prefix",
"fields":[
"field_1^5",
"field_2^4",
"field_3"
]
}
},
{
"term":
{
"field_id": "3"
}
}
],
"must_not":[
{
"term":
{
"status": "archived"
}
}
]
}
},
"size":6,
"highlight":{
"fields":{
"field_1":{},
"field_2":{},
"field_3":{}
}
}
}
我嘗試使用prefixQueryFields
屬性,該屬性與我想要的東西非常接近,除了它使用的是BoolShould
而不是BoolMust
,而且它始終包含默認的SimpleQueryString
查詢。 它看起來像這樣:
const prefixQueryFields = [
'field_1^5',
'field_2^4',
'field_3',
];
...
<SearchBox
searchOnChange={true}
prefixQueryFields={prefixQueryFields}
/>
我無法輕松找出問題所在,因此決定使用SearchBox
的queryBuilder
屬性。 這是我想出的:
_queryBuilder(queryString) {
const prefixQueryFields = [
'field_1^5',
'field_2^4',
'field_3',
];
return new ImmutableQuery()
.addQuery(BoolMust([
MultiMatchQuery(queryString, {
type: 'phase_prefix',
fields: prefixQueryFields,
})
]))
.addQuery(BoolMustNot([
TermQuery('status', 'archived'),
]));
}
...
<SearchBox
searchOnChange={true}
queryBuilder={this.queryBuilder}
/>
該查詢的結果更加混亂,在檢查文檔並粗略查看源代碼后,我不知道下一步該怎么做。
(為簡潔起見,除非有人認為該信息會有用,否則我不會理會這兩次嘗試創建的錯誤查詢。)
弄清楚了。 使用QueryDSL結構效果不是很好,但是顯然您可以使用純JSON創建查詢,效果很好。 基本上更新了我的查詢生成器,使其返回為:
return {
bool: {
must: [
{
multi_match:{
query: queryString,
type: 'phrase_prefix',
fields: prefixQueryFields,
}
}
],
must_not: [
{
term: {
status: 'archived',
}
}
]
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.