簡體   English   中英

如何在Searchkit中使用SearchBox構建復合查詢?

[英]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}
/>

我無法輕松找出問題所在,因此決定使用SearchBoxqueryBuilder屬性。 這是我想出的:

_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM