Elasticsearch 是一个基于 Lucene 的开源搜索引擎,提供分布式、高可用的全文搜索和分析能力。通过 jQuery/Ajax 与 Elasticsearch 交互,可以在前端实现高效的数据检索功能。
$.ajax({
url: 'http://your-elasticsearch-server:9200/your-index/_search',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
query: {
match: {
title: "搜索关键词"
}
}
}),
success: function(response) {
console.log("搜索结果:", response.hits.hits);
// 处理结果
response.hits.hits.forEach(function(hit) {
console.log(hit._source);
});
},
error: function(xhr, status, error) {
console.error("查询失败:", error);
}
});
$.ajax({
url: 'http://your-elasticsearch-server:9200/products/_search',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
query: {
bool: {
must: [
{ match: { name: "手机" } }
],
filter: [
{ range: { price: { gte: 1000, lte: 5000 } } }
]
}
}
}),
success: function(response) {
// 处理结果
}
});
$.ajax({
url: 'http://your-elasticsearch-server:9200/sales/_search',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
size: 0,
aggs: {
by_category: {
terms: {
field: "category.keyword",
size: 10
},
aggs: {
total_sales: {
sum: {
field: "amount"
}
}
}
}
}
}),
success: function(response) {
console.log("聚合结果:", response.aggregations.by_category.buckets);
}
});
原因:浏览器安全策略阻止跨域请求
解决方案:
原因:Elasticsearch 启用了安全认证
解决方案:
$.ajax({
url: 'http://your-elasticsearch-server:9200/_search',
type: 'POST',
headers: {
'Authorization': 'Basic ' + btoa('username:password')
},
// 其他参数...
});
原因:JSON 格式不正确或查询语法错误
解决方案:
原因:查询过于复杂或数据量过大
解决方案:
{
"from": 0,
"size": 10,
"query": { ... }
}
{
"_source": ["title", "price"],
"query": { ... }
}
通过以上方法和示例,您可以有效地使用 jQuery/Ajax 与 Elasticsearch 进行交互,实现强大的搜索功能。
没有搜到相关的文章