我开始使用搜索工具包,并尝试连接到Elasticsearch版本5.2的本地实例。 Elasticsearch实例中已有索引,映射和数据,我可以使用Kibana查询数据。
页面加载时,结果始终为0结果。我甚至不确定它是否成功连接到本地实例。代码是:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import registerServiceWorker from './registerServiceWorker';
import{SearchkitManager,SearchkitProvider,SearchBox,Hits,HitsStats} from "searchkit";
const searchkit = new SearchkitManager("http://localhost:9200");
ReactDOM.render((
<SearchkitProvider searchkit={searchkit}>
<div>
<SearchBox searchOnChange={true} queryFields={["productName"]} queryOptions={{analyzer:"standard"}}/>
<HitsStats translations={{
"hitstats.results_found":"{hitCount} results found"
}}/>
<Hits hitsPerPage={5}/>
</div>
</SearchkitProvider>), document.getElementById('root'));
registerServiceWorker();
我可能做错了什么或遗失了什么。任何人都可以帮忙吗?
答案 0 :(得分:1)
尝试设置索引和类型
const searchkit = new SearchkitManager("http://localhost:9200/product-index/product");
答案 1 :(得分:0)
好的,只是为了分享可能已经发现的问题。我需要在Elasticsearch yml文件中添加2行:
http.cors.enabled: true
http.cors.allow-origin: "*"
答案 2 :(得分:0)
所有浏览器都启用了默认安全策略:
来自Wipikedia:
同源策略是Web应用程序中的一个重要概念 安全模型。根据该策略,Web浏览器允许脚本 包含在第一个网页中以访问第二个网页中的数据,但是 仅当两个网页具有相同的来源时。原点定义为a URI方案,主机名和端口号的组合。
我想您使用3000
端口上公开的本地Web服务器为您的网页提供服务。因此,当您的ES实例在http://localhost:3000
公开时,对弹性搜索的ajax请求的起源为http://localhost:9200
。
你有很多选择来解决这个问题。
您可以将此SO问题跟到disabling same origin policy in Chrome。
您可以配置本地反向代理(例如nginx),以localhost
为您的网页提供服务,同时在localhost/es
公开您的ES实例。这是一个简单的nginx example to expose ES at localhost。
如果您使用基于节点的应用来为您的网页提供服务,则可以使用node-http-proxy从本地路径(例如localhost:3000/es
)向您的ES实例代理请求。
将这些行添加到elasticsearch.yml
配置文件中:
http.cors.enabled: true
http.cors.allow-origin: "http://localhost:3000"
如果您想允许所有Origins只用"*"
替换最后一个配置值。请参阅documentation for more information。