1

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

我可能做错了什么或错过了什么。有人可以帮忙吗?

4

3 回答 3

1

尝试设置索引和类型

const searchkit = new SearchkitManager("http://localhost:9200/product-index/product");
于 2017-10-13T07:09:54.687 回答
0

好的,只是为了分享可能已经发现问题。我需要在 Elasticsearch yml 文件中添加 2 行:

http.cors.enabled: true 
http.cors.allow-origin: "*" 
于 2017-09-03T15:36:56.440 回答
0

所有浏览器都启用了默认的安全策略:

来自维基百科

同源策略是 Web 应用安全模型中的一个重要概念。根据该策略,网络浏览器允许包含在第一个网页中的脚本访问第二个网页中的数据,但前提是两个网页具有相同的来源。源定义为 URI 方案、主机名和端口号的组合。

我想您正在使用3000端口上公开的本地 Web 服务器为您的网页提供服务。因此,当您对 elasticsearch 的 ajax 请求起源于http://localhost:3000您的 ES 实例在http://localhost:9200.

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

在 Chrome 中禁用同源策略(仅用于开发!)

您可以按照这个 SO question在 Chrome 中禁用同源策略

使用反向代理

您可以配置一个本地反向代理(例如 nginx)来为您的页面提供服务,localhost同时将您的 ES 实例暴露在localhost/es. 这是一个简单的nginx 示例,用于在 localhost 公开 ES

从您的应用程序到 ES 的代理请求

如果您使用基于节点的应用程序来服务您的页面,您可以使用node-http-proxy将请求从您的本地路径(例如localhost:3000/es)代理到您的 ES 实例。

在您的 ES 实例中启用 CORS

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

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

如果您想允许所有 Origins,只需将最后一个配置值替换为"*". 有关详细信息,请参阅文档

于 2017-09-03T15:43:30.930 回答