2015-11-23 45 views
2

我使用elasticsearch與laravel 5:如何使用elasticsearch並自動完成的jQuery與建議陣列

做了很多的搜索和QBOX閱讀文章和elasticsearch約[當你鍵入結果]但我想只顯示結果從suggested_tags和jquery自動完成只顯示數組中的建議標籤不是全部。

我有很多建議文本在數組中提交elasticsearch命名爲suggested_tags,你可以在圖片中看到很多。我想通過搜索,並使用此查詢:

Showing Result In Sense kibana plugin

GET yourservice/_search 
{ 
    "query": { 
    "match": { 
     "suggested_tags": { 
     "query": "car", 
     "type": "phrase_prefix", 
     "operator": "and", 
     "fuzziness": 1.1 
     } 
    } 
    } 
} 

這一個顯示錯誤的結果並顯示出靠近汽車約17相同的重複多個結果。

如果使用此查詢:

GET yourservice/_search 
{ 
    "query": { 
    "match": { 
     "suggested_tags": "car" 
    } 
    } 
} 

結果數是2,但同樣的例子:

jQuery的自動完成功能顯示:

汽車和汽車 汽車和汽車

在嫋嫋查詢顯示兩個結果,但在laravel搜索與jquery自動完成顯示多個相同的結果看圖像。

Wrong multiple result

我只是困惑,爲什麼elasticsearch不同的結果,而不是導致我打字。

這裏是jQuery代碼:

$(function() { 
      $("#search").autocomplete({ 
       source: function(request, response) { 
        var wildcard = { "name": "*" + request.term.toLowerCase() + "*" }; 
        var postData = { 
         "query": { "wildcard": wildcard }, 
         "fields": ["name", "title"] 
        }; 
        $.ajax({ 
         url: "/api/search?query=" + $("#search").val(), 
         type: "GET", 
         success: function(data) { 
          response($.map(data.hits.hits, function(item) { 
           return { 
            label: item._source.name, 
            id: item._source.title 
           } 
          })); 
         }, 
        }); 
       }, 
       minLength: 1 
      }) 
     }); 

和查詢與laravel使用:

$params = [ 
      'index' => 'yourservice', 
      'type' => 'categories', 
      'body' => [ 
       "query" => [ 
        "match" => [ 
         "suggested_tags" => \Input::get("query") 
        ] 
       ] 
      ] 
     ]; 

感謝

回答

1

嗨過同樣的問題,但我使用Easy Auto Complete jQuery插件。僅僅因爲它易於使用,並且需要編寫更少的代碼和更多的事件,您也可以使用jquery自動完成。

你的問題是自動填充建議的陣列,因爲你上傳的圖像是正確的?

我認爲最好的部分使用多種建議從你這個代碼中定義數組:

"terms" => [ 
    "suggested_tags" => [ 
    // You need multiple values so use php string explode function then put variable here. 
    ] 
] 

不要忘了寫在上面查詢陣列碼。

你可以閱讀更多有關條款在此:Elastic Search Terms

後,您可以使用突出領域:

"highlight" => [ 
    "fields" => [ 
    "suggested_tags" => [ 
     "fragment_size" => 40 
    ] 
    ] 
] 

上面的代碼將突出顯示默認[EM]標籤的文字和你改變過。

正如我看到你有太多的數組建議標籤,如果你想建議你需要循環所有。

現在:

success: function(data) { 
    response($.map(data.hits.hits, function(item) { 
    return { 
     label: item._source.name, 
     id: item._source.title 
    } 
    })); 
}, 

需要進行財產以後這樣的:

for(var i = 0; i < result.length; i++) { 
    return result[i]; 
} 

我可以幫你更多,如果你的問題會更容易理解我,否則我可以通過訪問,你提到的修復。