2

Ich brauche Richtung über Volltextsuche in couchdb. Ist es bereits standardmäßig in 2.0 aktiviert, oder müssen wir couchdb neu erstellen, um es zu aktivieren?CouchDB Volltextsuche

Szenario: Es ist ein Dokumenten-Management-System, Dokumente werden in einem Raster angezeigt. Ich muss in der Lage sein, Ergebnisse zu sortieren. Nachdem einige Änderungen von der Karte auf elastische Indizes reduziert wurden, versuche ich jetzt, Mango-Abfragen zu verwenden. Problem ist, dass das Sortieren nicht die erwarteten Ergebnisse bringt.

{ 
    "selector": { 
    "directoryName": { 
     "$eq": "mail\\test\\inbox" 
    }}, 
    "sort": [{"subject": "asc"}] 
} 

Der Versuch von „Subjekt“ oder einem anderen Textfeld zu sortieren, mischt Ergebnisse mit, ich nehme an, „index Logik“ (zB: zurück sortiert Themen: „Diese E-Mail ...“, „Hallo ... "," Diese E-Mail ... ", definitiv nicht, was ich brauche). Denke nicht daran, ob Analysatoren, Token usw. etwas mit "seltsamen" Suchergebnissen zu tun haben. Mit Datumsfeldern desc sort, zum Beispiel, es funktioniert viel besser, aber ich habe ein "Eindringling" Ergebnis eines Dokuments des Jahres 2014, wenn Dokumente von 2017 bis desc, mit 2016 und 2015 Dokumente.

Ich habe Indizes vom Typ json für ein paar der möglichen Dokumentensortierfelder erstellt. Das Erstellen eines Texttypindex funktioniert nicht. Ich weiß nicht, dass die Volltextsuche meine "Sortier" -Probleme lösen wird, aber mit all den Verweisen auf die Cloudant-Abfragesprache und die Volltextsuche dachte ich, dass diese Funktion in 2.0 enthalten ist.

Antwort

3

CouchDB selbst hat keinen eingebauten Volltext-Indexer. Sie können viel mit Mango machen, aber Sie werden wahrscheinlich viel besser von einem dedizierten Volltext-Indexer bedient werden.

Die 2 am häufigsten verwendeten Optionen sind: couchdb-lucene und elasticseach

+0

Veröffentlichung 4.6.0 von CouchDB FTS in developer Preview hat. Es funktioniert ganz gut, aber ich spiele immer noch damit herum. –

+3

Das ist CouchBase, das ist nicht dasselbe wie CouchDB. Aber ja, das ist auch eine Option. –

0

nach längerem Suchen und scheiterte schließlich ich etwas funktionierendes System bekam, informieren Sie mich bitte keine Kommentare wissen wenn jemand eine Volltextsuche möchten, vielleicht können Sie versuchen, (alle Kommentare löschen und kopieren dann einfügen)

function (doc) { 
 
    var prefix; 
 
    for(prop in doc){ 
 
    if(prop=="_id"||prop=="_rev") // ignore _id, _rev or any unwanted properties 
 
    continue; 
 
    if(!Date.parse(doc[prop])) //ignore if it's a date type 
 
     prefix += doc[prop]; 
 
    else if(!isNAN(doc[prop])) // accept if it's a number type 
 
     prefix += doc[prop]; 
 
    else if(typeof(doc[prop]!=="boolean") //ignore if it's a boolean type 
 
     prefix += doc[prop]; 
 
    } 
 
    var i; 
 
    if (prefix) { 
 
     for (i = 0; i < prefix.length; i += 1) { 
 
      emit([prefix.slice(i)], doc); 
 
     } 
 
    } 
 
//searchText?startkey=["abc"]&endkey=["abc\u9999"]&reduce=false&skip=0&limit=3