Algolia:如何将改进从前端传递到后端?

Algolia:如何将改进从前端传递到后端?,algolia,Algolia,我有一个使用Algolia的React InstantSearch的网页。它有一个搜索栏和一些改进 我希望用户能够按下一个按钮,并获得所有匹配结果的列表 要获得所有结果的列表,我需要使用而不是。浏览索引允许检索所有点击;搜索索引只允许检索多达1000个点击。但是,不应在UI中使用浏览索引。因此,我想在我的web服务器上创建一个API端点,它使用浏览索引返回给定搜索查询的匹配点击列表 我能够成功地对搜索查询执行此操作,但我不知道如何对此进行优化 这是我到目前为止所拥有的东西的草图 后端(在Ruby

我有一个使用Algolia的React InstantSearch的网页。它有一个搜索栏和一些改进

我希望用户能够按下一个按钮,并获得所有匹配结果的列表

要获得所有结果的列表,我需要使用而不是。浏览索引允许检索所有点击;搜索索引只允许检索多达1000个点击。但是,不应在UI中使用浏览索引。因此,我想在我的web服务器上创建一个API端点,它使用浏览索引返回给定搜索查询的匹配点击列表

我能够成功地对搜索查询执行此操作,但我不知道如何对此进行优化

这是我到目前为止所拥有的东西的草图

后端(在Ruby中):

ALGOLIA_INDEX=ALGOLIA::INDEX.new('Products'))
类AlgoliaSearchController{
log(getSearchResults(searchstate.query));
});
返回(
搜寻
);
}
我找不到任何资源来解释如何进行优化搜索

到目前为止,我所看到的事情:

  • 我可以尝试将映射到浏览索引使用的。我可以编写自己的从搜索状态到查询的映射程序,但是,1)这似乎很复杂,我怀疑我遗漏了一些更简单的东西;2)这似乎应该在某个地方开源,因为我怀疑我不是第一个遇到这个问题的人

  • 有一篇文章解释了如何编写可插入
    InstatSearch
    组件的后端。但是,它没有解释我如何从搜索状态进行一次性搜索


你是对的,目前这并不是很简单。获取可用于“浏览”的原始搜索参数的流程如下所示:

  • 为自定义组件提供对上次搜索结果的访问权限
  • 从这些结果中读取状态
  • 使用此状态创建一个新的
  • 使用
    helper.getQuery()
    获取要应用的查询参数
  • 说明这一点的沙盒是:

    import React,{Component}来自'React';
    从'algoliasearch helper'导入algoliaHelper;
    从“react instantsearch dom”导入{connectStateResults};
    类下载器扩展组件{
    状态={
    说明:“”,
    };
    onDownloadClick=()=>{
    //从“connectStateResults”获取当前结果
    const res=this.props.searchResults;
    //从最后的结果中读取私有“状态”(SearchParameters)
    const state=res&&res.\u state;
    //创建具有此状态的新“帮助器”
    const helper=algoliaHelper({},state.index,state);
    //获取要应用的查询参数
    const rawQuery=helper.getQuery();
    这是我的国家({
    说明:
    '使用以下命令执行后端搜索:\n\n客户端.browsell('+
    stringify(rawQuery,null,2)+
    ')',
    });
    };
    render(){
    返回(
    下载
    {this.state.instructions}
    );
    }
    }
    导出默认connectStateResults(下载程序)
    
    ALGOLIA_INDEX = Algolia::Index.new('Products')
    
    class AlgoliaSearchController < ActionController::Base
      def get_search_results
        query = params['query']
        hits = []
        ALGOLIA_INDEX.browse({query: query}) do |hit|
          hits << hit
        end
        render json: hits
      end
    end
    
    import qs from 'qs';
    import React, { useCallback, useState } from 'react';
    import { InstantSearch } from 'react-instantsearch-dom';
    
    function getSearchResults(query) {
      const queryString = qs.stringify({
        query,
      })
      return fetch(`/search_results?{queryString}`);
    }
    
    
    function App() {
      const [searchState, setSearchState] = useState(null);
      const onSearchStateChange = useCallback(searchState => {
        setSearchState(searchState);
      }, [searchState]);
      const onClick = useCallback(() => {
        console.log(getSearchResults(searchstate.query));
      });
    
      return (
        <InstantSearch ... onSearchStateChange={onSearchStateChange}>
          <button onClick={onClick}>Search</button>
        </InstantSearch>
      );
    }