Warum gibt diese ES multi-match query
einen 400 Fehler (schlechte Anfrage) zurück?Elasticsearch Abfrage Parse Fehler
"query": {
"multi_match": {
"query": searchTerms,
"fields": ["content", "title"],
"operator": "and"
}
},
size: 100,
from: 0,
highlight: {
fields: {
"title": {number_of_fragments: 0},
"content": {number_of_fragments: 10,fragment_size: 300}
}
}
}
Ich verwende diese Abfrage in Verbindung mit AngularJS UI Bootstrap typeahead Code wie diese
uib-typeahead="query as query._source.ymme for query in getSuggestions($viewValue)" typeahead-on-select="search($item)"
Diese meine Suche ist() Funktion
$scope.search = function() {
console.log($scope.searchTerms);
$scope.currentPage = 0;
$scope.results.documents = [];
$scope.isSearching = true;
return searchService.search($scope.searchTerms, $scope.currentPage).then(function(es_return) {
var totalItems = es_return.hits.total;
var totalTime = es_return.took;
var numPages = Math.ceil(es_return.hits.total/$scope.itemsPerPage);
$scope.results.pagination = [];
for (var i = 1; i <= 100; i++) {
if(totalItems > 0)
$scope.results.totalItems = totalItems;
$scope.results.queryTime = totalTime;
$scope.results.pagination = searchService.formatResults(es_return.hits.hits);
$scope.results.documents = $scope.results.pagination.slice($scope.currentPage, $scope.itemsPerPage);
}
}
),
function(error){
console.log('ERROR: ', error.message);
$scope.isSearching = false;
}
};
Ich bin mir nicht ganz sicher, Was ist falsch? Ich denke, es hat etwas mit $ Scope zu tun, aber ich bin mir nicht sicher. Die Abfrage funktioniert, wenn ich das Sense-Plugin für ES verwende und es funktioniert auch, wenn ich nur einen Suchbegriff eintippe, anstatt ihn aus dem Dropdown-Menü für die automatische Vervollständigung auszuwählen.
Wenn es $scope
ist, was fehlt mir?
UPDATE Alle Scherben für Phase fehlgeschlagen: [query_fetch] org.elasticsearch.search.SearchParseException: [hugetestindex] [0]: von [-1], Größe [-1]: Parse Fehler [fehlgeschlagen analysiere Quelle [{"query": {"multi_match": {"Abfrage": {"_ index": "hugetestindex", "_ type": "doc", "_ id": "57", "_ score": 3.877801, " _source ": {" ymme ":" bourne supremacy "}}," Felder ": [" content "," title "]," operator ":" und "}}," size ": 100," from ": 0 , "Hervorhebung": {"fields": {"title": {"Nummer_der_Fragmente": 0}, "Inhalt": {"Nummer_der_Fragmente": 10, "Fragment_Größe": 300}}}]]
UPDATE 2Object {_index: "hugetestindex", _type: "doc", _id: "56", _score: 2.5276248, _source: Object}
Ich denke, das ist das Problem, anstelle eines Suchbegriffs, sein empfangendes "Objekt" ....?
UPDATE 3 Also im Grunde geht es so,
[Object, Object, Object, Object, Object]
0: Object
_id: "229"
_index: "hugetestindex"
_score: 3.3071127
_source: Object
ymme: "bourne supremacy"
__proto__: Object
_type: "doc"
__proto__:
Object1:
Object2:
Object3:
Object4:
Object
length: 5
__proto__: Array[0]
wobei „Bourne“ den Wert des ymme Feldes im _Source Objekt ist, an der Spitze das Array mit den 5-Objekten ist die es Rückkehr, es_return.hits.hits
- dieser letzte Treffer, ist das Array.
Kannst du deinen Fehler eingeben? Erhalten Sie auch den Fehler, wenn Sie etwas in Ihr Eingabefeld für den Typeahead eingeben oder wenn Sie etwas aus dem Typeahead auswählen? –
@VishalRao bitte UPDATE oben, der Fehler tritt nur auf, wenn ich aus der AutoVervollständigen Begriffe auswählen – user3125823
Kannst du in eine console.log() innerhalb von search(), um den Begriff als Parameter angezeigt zu sehen? Ich denke, dass das Problem dort liegen kann. –