Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

azure-search.js 2.6 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  1. var util = require('util');
  2. var _ = require('lodash');
  3. var Promise = require('bluebird');
  4. var request = require('request');
  5. function create(serviceName, serviceKey, index) {
  6. // base url
  7. // e.g.: https://realestate.search.windows.net/indexes('listings')/docs/search.post.search?api-version=2015-02-28-Preview
  8. var url = "https://" + serviceName + ".search.windows.net" +
  9. "/indexes('" + index + "')" +
  10. "/docs/search.post.search?api-version=2015-02-28-Preview";
  11. return {
  12. search: function (query) {
  13. return new Promise(function (resolve, reject) {
  14. console.log('AzureSearch.inputQuery:', query);
  15. // create request & azure query
  16. var options = {
  17. url: url,
  18. headers: { 'api-key': serviceKey },
  19. withCredentials: false,
  20. json: true,
  21. body: {
  22. count: false,
  23. facets: query.facets || [],
  24. filter: createFilterParams(query.filters),
  25. queryType: 'simple',
  26. scoringParameters: [],
  27. search: query.searchText,
  28. searchMode: 'all',
  29. skip: (query.pageNumber - 1) * query.pageSize,
  30. top: query.pageSize
  31. }
  32. };
  33. console.log('AzureSearch.query:', options.body);
  34. request.post(options, function (err, httpResponse, azureResponse) {
  35. if (err) {
  36. return reject(err);
  37. }
  38. resolve({
  39. results: azureResponse.value,
  40. facets: getFacets(azureResponse)
  41. });
  42. });
  43. });
  44. }
  45. };
  46. }
  47. // Helpers
  48. function getFacets(azureResponse) {
  49. var rawFacets = azureResponse['@search.facets'];
  50. if (!rawFacets) {
  51. return [];
  52. }
  53. var facets = _.toPairs(rawFacets)
  54. .filter(function (p) { return _.isArray(p[1]); })
  55. .map(function (p) { return { key: p[0], options: p[1] }; });
  56. return facets;
  57. }
  58. function createFilterParams(filters) {
  59. if (!filters || !filters.length) {
  60. return '';
  61. }
  62. return filters.map(function (f) {
  63. return util.format('%s eq \'%s\'', f.key, escapeFilterString(f.value));
  64. }).join(' and ');
  65. }
  66. function escapeFilterString(string) {
  67. return string.replace(/'/g, '\'\'');
  68. }
  69. // Exports
  70. module.exports = {
  71. create: create
  72. };
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...