Создание агрегирующего запроса для запуска автозавершения
Я пытаюсь сделать запрос к базе данных MongoDB с помощью Django с агрегатом, чтобы иметь возможность спровоцировать автозавершение.
class SearchResultsView(ListView):
model = Perfume
template_name = 'todo/search_similar_results.html'
def get_queryset(self): # new
query = self.request.GET.get('q')
print("JE SUIS PASSE PAR LA")
# object_list = list(collection.find({"q0.Results.0.Name": {"$regex": str(query), "$options": "i"}}))
object_list = list(collection.aggregate([
{
"$search":{
"autocomplete":{
"query": str(query),
"path": "name",
"fuzzy":{
"maxEdits":2,
}
}
}
}]
print('type(object_list): ', type(object_list))
return object_list
Но я ничего не получаю назад:
[11/Mar/2021 14:36:07] "GET /similar/static/vendor/bootstrap/js/bootstrap.min.js HTTP/1.1" 404 3938
JE SUIS PASSE PAR LA
[]
Я также попробовал это на этапе создания пайплайна агрегации в MongoDB Atlas, но не знаю, как это сделать:
/**
* index: the name of the Search index.
* text: Analyzed search, with required fields of query and path, the analyzed field(s) to search.
* term: Un-analyzed search.
* compound: Combines ops.
* span: Find in text field regions.
* exists: Test for presence of a field.
* near: Find near number or date.
* range: Find in numeric or date range.
*/
{
index: 'test', # название моего индекса
text: {
query: 'atelier', # пример. У меня есть документ, в котором указано название этого ателье.
path: 'name' # название поля, которое я хочу проиндексировать
}
}
Обновление
Я снова попробовал на очень простом примере:
$(document).ready(function(){
var perfumes = ["dior","pacco","moschino"];
$("#autocomplete").autocomplete({source: perfumes, minLength: 0}).focus(function(){
/* Muestra todas las opciones al enfocar el input */
$(this).autocomplete('search', $(this).val())
});
});
<!-- jQuery-UI CSS -->
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/cupertino/jquery-ui.css"/>
<form class="form" action="#" method="get" autocomplete="off">
<input id="autocomplete" type="text" placeholder="Perfume name...">
<input id="perfumename" type="submit" value="Find Similar Perfumes"/>
</form>
<!-- jQuery-Min JS -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<!-- jQuery-UI JS -->
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script>
Работает. Я не могу этого сделать, когда пытаюсь из базы данных MongoDB:
$(document).ready(function () {
const datos = await fetch(`http://localhost:8000/similar/similar_results/?query=${request.term}`);
const filtrar = (w) => {
return datos
}
// handle click and add class
$("#autocomplete").autocomplete({
source: async function(request, response) {
let data = filtrar().map(result => {
return { label: result.name, value: result.name, id: result._id };
});
response(data);
},
minLength:2,
select: function(event, ui){
console.log(ui.item);
}
});
})
Не работает.