0
点赞
收藏
分享

微信扫一扫

Elastic search_搜索代码,前端组装query get post搜索,后端php拼query请求搜索

alonwang 2023-03-03 阅读 7


// Update this variable to point to your domain.
var apigatewayendpoint = 'http://192.168.1.245:9200/job_name/_search';
var loadingdiv = $('#loading');
var noresults = $('#noresults');
var resultdiv = $('#results');
var searchbox = $('input#search');
var timer = 0;
var publisherId = $("input[name='publisherId']").val();

// Executes the search function 250 milliseconds after user stops typing
searchbox.keyup(function () {
clearTimeout(timer);
timer = setTimeout(search, 250);
});

async function search() {
// Clear results before searching
noresults.hide();
resultdiv.empty();
loadingdiv.show();
// Get the query from the user
let query = searchbox.val();
// Only run a query if the string contains at least three characters
if (query.length > 2) {
// Make the HTTP request with the query as a parameter and wait for the JSON results
// var data = {
// "from" : 0, "size" : 5,
// "query": {
// "bool": {
// "must": [
// { "multi_match": {
// "query" : query
// }}
// ],
// "filter": [
// { "term": { "external.tenantId": 49 }}
// ]
// }
// },

// "highlight": {
// "pre_tags": ["<b class=\"c_color\">"],
// "post_tags": ["</b>"],
// "fields": {
// "content": {},
// "external.bookTitle": {},
// "external.bookUploadedBy": {},
// "external.bookAssignedGroups": {}
// }
// }
// };
// $.ajax({
// type: "POST",
// url: apigatewayendpoint,
// data: JSON.stringify(data),
// contentType: "application/json",
// success: function (data) {
// // Get the part of the JSON response that we care about
// let results = data['hits']['hits'];
// if (results.length > 0) {
// loadingdiv.hide();
// // Iterate through the results and write them to HTML
// resultdiv.append('<p>Found ' + results.length + ' results.</p>');
// $('#searchResult').html('Search Results( ' + results.length + ')');
// let trHtml = '';
// console.log(results)
// for (var item in results) {
// let sourceTitle = results[item]._source.external.bookTitle;
// let title = results[item].highlight["external.bookTitle"];
// let content = results[item].highlight.content;
// let bookAssignedGroups = results[item].highlight["external.bookAssignedGroups"];
// let bookUploadedBy = results[item].highlight["external.bookUploadedBy"];
// // console.log(sourceTitle);
// trHtml += "<tr> <td> <div class='col-md-3'> <h4 class='text-semibold bookTitle'>" + (title ? title : sourceTitle) + "</h4>" +
// "<div class='col-md-6' style='padding-left:0;'>" +
// (bookAssignedGroups ? bookAssignedGroups : '') +
// "</div>" +
// "<div class='col-md-6'>" +
// (bookUploadedBy ? bookUploadedBy : '') +
// "</div></div> <div class='col-md-9'></div>" +
// "<div class='col-md-12'> " +
// (content ? content : '') +
// "</div> </td> </tr>";
// }
// let resultTb = '<table class="table table-striped dataTable" style="table-layout: fixed; margin-top:0px !important"> <tbody>' +
// trHtml +
// '</tbody></table>';
// resultdiv.append(resultTb);
// } else {
// noresults.show();
// }
// },
// error: function (res) {
// // console.log(res)
// },
// complete: function (res) {
// // console.log(res)
// }
// });
var searchD = {};
searchD.query = query;
// searchD.pagesize = window.pagesize;
searchD.pagenum = window.pagenum;
searchD.publisherId = window.publisherId;
ajaxRequest(GSTWeb.BASE_URL + "ajax/elasticsearch/search", searchD, {
success: function (data) {
console.log(data);
// Get the part of the JSON response that we care about
let results = data.hits.hits;
let paging = data.paging;
if (results.length > 0) {
loadingdiv.hide();
// Iterate through the results and write them to HTML
resultdiv.append('<p>Found ' + results.length + ' results.</p>');
$('#searchResult').html('Search Results( ' + results.length + ')');
let trHtml = '';
for (var item in results) {
let sourceTitle = results[item]._source.external.bookTitle;
let title = results[item].highlight["external.bookTitle"];
let content = results[item].highlight.content;
let bookAssignedGroups = results[item].highlight["external.bookAssignedGroups"];
let bookUploadedBy = results[item].highlight["external.bookUploadedBy"];
// console.log(sourceTitle);
trHtml += "<tr> <td> <div class='col-md-3'> <h4 class='text-semibold bookTitle'>" + (title ? title : sourceTitle) + "</h4>" +
"<div class='col-md-6' style='padding-left:0;'>" +
(bookAssignedGroups ? bookAssignedGroups : '') +
"</div>" +
"<div class='col-md-6'>" +
(bookUploadedBy ? bookUploadedBy : '') +
"</div></div> <div class='col-md-9'></div>" +
"<div class='col-md-12'> " +
(content ? content : '') +
"</div> </td> </tr>";
}
let resultTb = '<table class="table table-striped dataTable" style="table-layout: fixed; margin-top:0px !important"> <tbody>' +
trHtml +
'</tbody></table>';
resultdiv.append(resultTb);
let resultPaging = '<div class="panel-footer text-default bg-panel" style="background:#fff;">' +
paging +
'<div class="clearfix"></div></div>';
resultdiv.append(resultPaging);
$('.pagination a').attr('href', 'javascript:;').on('click', function (e) {
window.pagenum = e.currentTarget.innerHTML;
resultdiv.html();
search();
});

} else {
noresults.show();
}
}
})
}
loadingdiv.hide();
}

function ajaxRequest(url, dataForm, options) {
$.ajax({
url: url,
type: "post",
data: dataForm,
dataType: "json",
ContentType: "applicatio/json;",
success: function (data) {
options.success(data);
},
error: function (data) {
//error
}
});
}

后端 搜索 代码 

public function searchAction()
{
$pageNum = intval($this->getRequest()->getParam('pagenum'));
$pageSize = intval($this->getRequest()->getParam('size'));
$publisherId = intval($this->getRequest()->getParam('publisherId'));

if (!$pageSize) {
$pageSize = 1;
}

if (!$pageNum) {
$pageNum = 0;
} else {
$pageNum--;
}
$searchText = $this->getRequest()->getParam('query');
$result = array('success' => false, 'message' => '');
$client = new Client();
$address= Kbuuk_Constant::FSCRAWLER_URL;

$url = $address +'/job_name/_search';
$searchArr = [
"from" => $pageNum,
"size" => $pageSize,
"query" => [
"bool" => [
"must" => [
[
"multi_match" => [
"query" => $searchText
]
]
],
"filter" => [
["term" => ["external.tenantId" => $publisherId]]
]
]
]
,
"highlight" => [
"pre_tags" => ["<b class=\"c_color\">"],
"post_tags" => ["</b>"],
"fields" => [
"content" => (object)[],
"external.bookTitle" => (object)[],
"external.bookUploadedBy" => (object)[],
"external.bookAssignedGroups" => (object)[]
]
]
];
$r = $client->request('POST ', $url, [
"json" => $searchArr
]);
$result = $r->getBody()->getContents();
$newResult = json_decode($result,true);
$total = $newResult["hits"]["total"]["value"];

$pageCount = ceil(intval($total) / $pageSize);

$pageUrl = $this->view->baseUrl("globalsearch/elasticsearch?size=$pageSize");
$pagerHTML = $this->renderPager($pageUrl, $pageNum, $pageCount);

$paging = '<div class="panel-footer text-default bg-panel" style="background:#fff;">';
$paging .= $pagerHTML;
$paging .= '</div>';
$newResult['paging'] = $paging;
$this->_helper->json->sendJson($newResult);
}

 

举报

相关推荐

0 条评论