【问题标题】:How can I build a compound query with SearchBox in searchkit?如何在 searchkit 中使用 SearchBox 构建复合查询?
【发布时间】:2023-04-04 01:22:01
【问题描述】:

我正在使用 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}
/>

这个查询结果更加混乱,在检查文档和粗略查看源代码后,我不知道下一步该尝试什么。

(为简洁起见,我不会费心将这两次尝试创建的错误查询包括在内,除非有人认为该信息有用。)

【问题讨论】:

    标签: javascript reactjs elasticsearch searchkit


    【解决方案1】:

    想通了。使用 QueryDSL 结构效果不是很好,但显然您可以使用纯 JSON 创建查询,效果很好。基本上更新了我的查询生成器以返回:

    return {
      bool: {
        must: [
          {
            multi_match:{
              query: queryString,
              type: 'phrase_prefix',
              fields: prefixQueryFields,
            }
          }
        ],
        must_not: [
          {
            term: {
              status: 'archived',
            }
          }
        ]
      }
    };
    

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 2018-04-22
      • 2021-12-23
      • 2021-06-05
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多