0

現在、私が使用しているインスタント検索は問題なく動作していますが、1 つだけ問題があります。

「Chemical」と入力するたびに、クエリが表示されます

Chemical Engineer
Chemical Entrepreneur
Checmical People

しかし、「Chemical」の後に「Engineer」を追加すると、結果は次のようになります。

Chemical Engineer
Chemical Entrepreneur
Checmical People
Chemical Engineer
Chemical Entrepreneur
Checmical People

これがコードです

router.js

router.post('/api/search/', function(req, res, next) {

  Product.search(
    {
      query_string:
      { query: req.body.search_term }
    } , function(err, results) {
        if (err) return next(err);
        res.json(results);
    });
});

custom.js

$('#search').keyup(function() {

    // 1. grab the search term from the input field
    var search_term = $(this).val();

    // 2. send it to your back-end via ajax in the body
    $.ajax({
      method: "POST",
      url: "/api/search",            // <-- your back-end endpoint
      data: { search_term },  // <-- what you're sending
      dataType: "json",              // <-- what you're expecting back
      success: function(json){       // <-- do something with the JSON you get
        // 3. parse the JSON and display the results
        var res = json.hits.hits.map(function(hit) {
          return hit;
        });
        console.log(res);
        for (var i = 0; i < res.length; i++) {
          $('.testing').append('<li>' + res[i]._source.name + '</li>');
        }

      },
      error: function(data){
        alert('Error', data);
      }
    });
  });

重複を停止するにはどうすればよいですか?

curl -XGET localhost:9200/products/_mapping を使用した後 Val が提案

{"products":{"mappings":{"product":{"properties":{"_id":{"type":"string"},"category":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"price":{"type":"double"},"sizes":{"type":"string"},"stocks":{"type":"double"}}}}}}
4

1 に答える 1

1

以前の結果を消去する必要があると思います。常にキーを押すとテキストフィールドの値が取得され、その値がajax経由で送信されます。あなたが書いたChemical場合、HTMLに追加されるいくつかの応答が得られます。これらの応答はすべて一致するChemicalため、書くときにChemical Engineering以前に追加されたタグをクリーンアップする必要があるため、これで十分だと思います:

custom.js

$('#search').keyup(function() {

    // 1. grab the search term from the input field
    var search_term = $(this).val();

    // 2. send it to your back-end via ajax in the body
    $.ajax({
      method: "POST",
      url: "/api/search",            // <-- your back-end endpoint
      data: { search_term },  // <-- what you're sending
      dataType: "json",              // <-- what you're expecting back
      success: function(json){       // <-- do something with the JSON you get
        // 3. parse the JSON and display the results
        var res = json.hits.hits.map(function(hit) {
          return hit;
        });
        console.log(res);
        $('.testing').empty(); ///new line added
        for (var i = 0; i < res.length; i++) {
          $('.testing').append('<li>' + res[i]._source.name + '</li>');
        }

      },
      error: function(data){
        alert('Error', data);
      }
    });
  });

PS: 文var search_term = $(this).val();は必要ありませんkeyup関数は、パラメーターを介しeventて、element

https://api.jquery.com/keyup/

于 2015-12-23T12:59:44.117 に答える