2

クエリを実行したいelasticsearchサーバーがありますが、ユーザーに結果を表示する前に、結果をフィルタリングしたい(データベースなどでユーザーの権利を検索する)

そこで、JSON POST 検索リクエストを受け取り、これを Elasticsearch サーバーにリダイレクトするプロキシ サーバーを作成することにしました。結果を含む応答が「フィルター サーバー」に送信されるようになりました。このサーバーは、受信した json データをデータベースで検索し、ユーザーが表示できない結果を削除します。このフィルタリングされたコンテンツは、ユーザーに提示する必要があります。

わかりました-これは私がやったことです:

var proxy = http.createServer(function (req, res){
  if(req.method == 'OPTIONS'){
   res.writeHead(200, {'Access-Control-Allow-Origin': '*', 'Content-Type':   'application/json; charset=UTF-8'});
   res.end();
 }

if(req.method == 'POST'){

  var searchOptions = {
    host: '10.0.10.1',
    port: 9200,
    method: 'POST',
    path: '/ltg_5096/_search'
  }

    var searchRequest = http.request(searchOptions, function(searchResponse){

    // this is the Request to the Elasticsearch Server...

    var filterOptions = {
      host: '127.0.0.1',
      port: 8080,
      method: 'POST',
      path: '/',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }

    var filterRequest = http.request(filterOptions, function(filterResponse){
      // ?! This should be the request to the filter Server
    })

    searchResponse.pipe(res)
    res.writeHead(200, {'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json; charset=UTF-8'})
  })
  req.pipe(searchRequest)
 }
})

proxy.listen(9000)

これはプロキシ サーバーですが、フィルタリング インスタンスによって結果がフィルタリングされる部分はありません。いろいろ試してみましたが、思うように動かせませんでした。誰かがこれで私を助けてくれることを願っています!

4

1 に答える 1

5

これはあなたが必要とするものです:

https://github.com/lukas-vlcek/node.es

これは node.js 上に構築されたシンプルだが便利な Elasticsearch プロキシです。このプロキシは、次の 2 つの関数を定義することで、リクエストとレスポンスをインターセプトおよび変更できます。

var preRequest = function(request) {};
var postRequest = function(request, response, responseData){};
var proxyServer = proxyFactory.getProxy(preRequest, postRequest);
proxyServer.start();

次の例を見てください。

https://github.com/lukas-vlcek/node.es/blob/master/proxy/proxy-example.js

于 2013-08-02T04:33:24.683 に答える