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