无法使用Searchkit连接到Elasticsearch

时间:2017-09-03 14:46:09

标签: elasticsearch searchkit

我开始使用搜索工具包,并尝试连接到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();

我可能做错了什么或遗失了什么。任何人都可以帮忙吗?

3 个答案:

答案 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

你有很多选择来解决这个问题。

在Chrome中禁用相同的来源政策(仅用于开发!)

您可以将此SO问题跟到disabling same origin policy in Chrome

使用反向代理

您可以配置本地反向代理(例如nginx),以localhost为您的网页提供服务,同时在localhost/es公开您的ES实例。这是一个简单的nginx example to expose ES at localhost

从您的应用

向ES发送代理请求

如果您使用基于节点的应用来为您的网页提供服务,则可以使用node-http-proxy从本地路径(例如localhost:3000/es)向您的ES实例代理请求。

在ES实例中启用CORS

将这些行添加到elasticsearch.yml配置文件中:

http.cors.enabled: true 
http.cors.allow-origin: "http://localhost:3000" 

如果您想允许所有Origins只用"*"替换最后一个配置值。请参阅documentation for more information