vuejs 使用 elasticsearch api 方法
vuejs using elasticsearch api methods
我有一个vuejs脚本,需要使用elasticsearch api方法。
// ./main.js
var Vue = require('vue');
Vue.use(require('vue-resource'));
import ES from './elasticsearch.js';
new Vue({
el: 'body',
methods: {
search: function() {
// should call the es.search...
}
}
});
和 elasticsearch 脚本:
// ./elasticsearch.js
var es = require('elasticsearch');
var client = new es.Client({
host: 'localhost:9200'
,log: 'trace'
});
client.search({
index: 'my_index',
type: 'my_type',
body: {
fields: {},
query: {
match: {
file_content: 'search_text'
}
}
}
}).then(function (resp) {
var hits = resp.hits.hits;
}, function (err) {
console.trace(err.message);
});
所以,在方法search中main.js应该调用client.search 并发送要在我的服务器 (_search_text_) 中搜索的文本。
我们如何绑定它?或者我们如何在 vuejs 方法中使用 elasticsearch 对象?
谢谢!
我想你的代码中的 "resp.hits.hits" 是搜索结果 JSON Object Array ,那么你可以像下面这样定义你的 vue 实例:
// ./main.js
var Vue = require('vue');
Vue.use(require('vue-resource'));
import ES from './elasticsearch.js';
new Vue({
el: 'body',
data:{
searchResults:[] //this tell vue it is an array
}
methods: {
search: function() {
var self = this;
// call the search and get response data
client.search(function(resp){
self.searchResults = resp.hits.hits
})
}
}
});
在您的 html 中,您只需将 DOM 绑定到 searchResults,仅此而已。
您的 elasticsearch.js 文件未正确配置为模块:import ES from './elasticsearch'
不会执行任何操作,因为该文件不导出任何内容。
它应该看起来更像这样:
// ./elasticsearch.js
var es = require('elasticsearch');
var client = new es.Client({
host: 'localhost:9200'
,log: 'trace'
});
function search (myIndex, myType, searchText)
return client.search({
index: myIndex,
type: myType,
body: {
fields: {},
query: {
match: {
file_content: searchText
}
}
}
}).then(function (resp) {
return hits = resp.hits.hits;
}, function (err) {
console.trace(err.message);
});
export { search }
我们定义一个名为search
的函数并将其导出。请注意,我还包含了 return
语句,实际上 return Promise 和函数的结果。
然后在 main.js 中,我们可以通过该名称导入它,并使用它:
// ./main.js
var Vue = require('vue');
Vue.use(require('vue-resource'));
import { search } from './elasticsearch.js';
new Vue({
el: 'body',
methods: {
search: function() {
var result = search('someindex', 'sometype', 'Search text here' ).then(function(res) {
// do something with the result
})
}
}
});
我有一个vuejs脚本,需要使用elasticsearch api方法。
// ./main.js
var Vue = require('vue');
Vue.use(require('vue-resource'));
import ES from './elasticsearch.js';
new Vue({
el: 'body',
methods: {
search: function() {
// should call the es.search...
}
}
});
和 elasticsearch 脚本:
// ./elasticsearch.js
var es = require('elasticsearch');
var client = new es.Client({
host: 'localhost:9200'
,log: 'trace'
});
client.search({
index: 'my_index',
type: 'my_type',
body: {
fields: {},
query: {
match: {
file_content: 'search_text'
}
}
}
}).then(function (resp) {
var hits = resp.hits.hits;
}, function (err) {
console.trace(err.message);
});
所以,在方法search中main.js应该调用client.search 并发送要在我的服务器 (_search_text_) 中搜索的文本。
我们如何绑定它?或者我们如何在 vuejs 方法中使用 elasticsearch 对象?
谢谢!
我想你的代码中的 "resp.hits.hits" 是搜索结果 JSON Object Array ,那么你可以像下面这样定义你的 vue 实例:
// ./main.js
var Vue = require('vue');
Vue.use(require('vue-resource'));
import ES from './elasticsearch.js';
new Vue({
el: 'body',
data:{
searchResults:[] //this tell vue it is an array
}
methods: {
search: function() {
var self = this;
// call the search and get response data
client.search(function(resp){
self.searchResults = resp.hits.hits
})
}
}
});
在您的 html 中,您只需将 DOM 绑定到 searchResults,仅此而已。
您的 elasticsearch.js 文件未正确配置为模块:import ES from './elasticsearch'
不会执行任何操作,因为该文件不导出任何内容。
它应该看起来更像这样:
// ./elasticsearch.js
var es = require('elasticsearch');
var client = new es.Client({
host: 'localhost:9200'
,log: 'trace'
});
function search (myIndex, myType, searchText)
return client.search({
index: myIndex,
type: myType,
body: {
fields: {},
query: {
match: {
file_content: searchText
}
}
}
}).then(function (resp) {
return hits = resp.hits.hits;
}, function (err) {
console.trace(err.message);
});
export { search }
我们定义一个名为search
的函数并将其导出。请注意,我还包含了 return
语句,实际上 return Promise 和函数的结果。
然后在 main.js 中,我们可以通过该名称导入它,并使用它:
// ./main.js
var Vue = require('vue');
Vue.use(require('vue-resource'));
import { search } from './elasticsearch.js';
new Vue({
el: 'body',
methods: {
search: function() {
var result = search('someindex', 'sometype', 'Search text here' ).then(function(res) {
// do something with the result
})
}
}
});