React InstantSearch:RefinementList 过滤器覆盖配置过滤器
React InstantSearch: RefinementList filters overrides Configure filters
问题
如何以与 RefinementList
应用的过滤器兼容的方式应用自定义搜索过滤器?
背景
我正在尝试设计用户可以通过两种方式进行搜索的搜索功能:
- 搜索给定字符串以出现在任何搜索文档中的“正常”方式
- 给定集合 if ID 的特定查找。用户希望搜索结果是包含任何给定 ID 的所有搜索文档。不多也不少。
当我检测到搜索输入仅包含有效格式的 ID 时,我从搜索选项一切换到选项二
当前实施
我发现让我的搜索引擎 (typesense) 获得搜索选项二的 return 结果的最简单方法是仅使用带星号搜索的 filter_by
选项,如下所示:
{
"query_by":"product_number,ean_number",
"collection":"products",
"q":"*",
"filter_by": "product_number:=[123, 456]"
}
return 任何带有 product_number
123 或 456 的搜索文档。
因此,在我的自定义 SearchBox
组件中,当我检测到搜索应遵循选项二时,我调用 refine('*')
并在 Configure
组件中设置过滤器。
<InstantSearch>
<Configure facetFilters={ buildFilterBy(...) } />
<CustomRefinementList {...} />
</InstantSearch>
这很好用,但只要用户在 CustomRefinementList
中选择其他优化,Configure
过滤器就会被覆盖,搜索现在 returns all 个匹配优化的文档(由于星号搜索)。
四处阅读,似乎我不应该使用 Configure
组件来应用超出初始 search/render 的过滤器。我认为应该有一种方法可以通过 refine
函数应用过滤器,尽管关于 refine
函数可以接受的搜索字符串之外的哪些参数的文档似乎有点缺乏。
在 Configure
小部件中,如果您使用 filters
(而不是 facetFilters
或 numericFilters
),这些过滤器将与 facetFilters
RefinementList 小部件添加。这将有效地使您能够使用 Configure
.
设置冻结/永久过滤器
您想确保您使用的是 typesense-instantsearch-adapter 的 v2.4.1。
此处有更多上下文:https://github.com/typesense/typesense-instantsearch-adapter/issues/110#issuecomment-1112633962
问题
如何以与 RefinementList
应用的过滤器兼容的方式应用自定义搜索过滤器?
背景
我正在尝试设计用户可以通过两种方式进行搜索的搜索功能:
- 搜索给定字符串以出现在任何搜索文档中的“正常”方式
- 给定集合 if ID 的特定查找。用户希望搜索结果是包含任何给定 ID 的所有搜索文档。不多也不少。
当我检测到搜索输入仅包含有效格式的 ID 时,我从搜索选项一切换到选项二
当前实施
我发现让我的搜索引擎 (typesense) 获得搜索选项二的 return 结果的最简单方法是仅使用带星号搜索的 filter_by
选项,如下所示:
{
"query_by":"product_number,ean_number",
"collection":"products",
"q":"*",
"filter_by": "product_number:=[123, 456]"
}
return 任何带有 product_number
123 或 456 的搜索文档。
因此,在我的自定义 SearchBox
组件中,当我检测到搜索应遵循选项二时,我调用 refine('*')
并在 Configure
组件中设置过滤器。
<InstantSearch>
<Configure facetFilters={ buildFilterBy(...) } />
<CustomRefinementList {...} />
</InstantSearch>
这很好用,但只要用户在 CustomRefinementList
中选择其他优化,Configure
过滤器就会被覆盖,搜索现在 returns all 个匹配优化的文档(由于星号搜索)。
四处阅读,似乎我不应该使用 Configure
组件来应用超出初始 search/render 的过滤器。我认为应该有一种方法可以通过 refine
函数应用过滤器,尽管关于 refine
函数可以接受的搜索字符串之外的哪些参数的文档似乎有点缺乏。
在 Configure
小部件中,如果您使用 filters
(而不是 facetFilters
或 numericFilters
),这些过滤器将与 facetFilters
RefinementList 小部件添加。这将有效地使您能够使用 Configure
.
您想确保您使用的是 typesense-instantsearch-adapter 的 v2.4.1。
此处有更多上下文:https://github.com/typesense/typesense-instantsearch-adapter/issues/110#issuecomment-1112633962