2016-06-09 12 views
0

Dies ist auf Amazon Cloudsearch, aber es gilt wahrscheinlich für jede generische Lucene/Solr-Installation.Suchergebnisse von distinct field - cloudsearch/solr/lucene

Ich indexiere eine Reihe von Artikeln und Kommentaren zu diesen Artikeln, die durchsucht werden sollen. Wenn ich nach "Trump sucks" suche, möchte ich die Möglichkeit haben, eine Liste von Kommentaren zu erhalten, die übereinstimmen, oder eine Liste von Artikeln, deren Kommentare übereinstimmen.

Ich weiß, ich kann sie Index in zwei getrennten Domänen, aber ich frage mich, ob es ein einfacher Weg ist mit anderen Worten einen „distinct“ auf einem Feld zu tun ... ...

ich eine Liste habe indizierter Dokumente für jeden Kommentar, der auch die article_id als Feld enthält .. so:

id = 1 { 'article_id': 10}

id = 2 { 'article_id': 10}

Wenn diese beiden Kommentare übereinstimmen, erhalte ich 2 Ergebnisse. (Und ja, ich kann auf der Client-Seite eine deutliche Unterscheidung machen, aber es würde Paging und ähnliches durcheinander bringen). Ich möchte in der Lage sein, nur zurück [10]

Antwort

0

Es gibt keine Möglichkeit, in CloudSearch eindeutig zu tun, so dass Sie mit einer anderen Lösung kommen müssen.

Das Beste, was ich anbieten kann, ist es, alle Kommentare in einem einzigen Textfeld in Artikeldatensätzen zu verketten und ein Typfeld hinzuzufügen, um Kommentare und Artikel zu unterscheiden (wenn Sie noch keinen haben). Sie können dann beim Suchen über die verketteten Kommentare und den Artikeltext nach type = Article suchen und erhalten nur ein Ergebnis pro Artikel.

Auch mit Tausenden von Kommentaren verkettet zu einem einzelnen Feld auf jeden Artikel Ich bin sicher, CloudSearch wird gut funktionieren (vielleicht sogar besser als mit Zehntausenden von zusätzlichen Datensätzen zu concider), aber Ihr Update-Prozess, um alle Kommentare zu verketten schwer. Wenn Sie Tausende von Kommentaren erhalten, müssen Sie ein Flag-Tracking hinzufügen, wenn es verkettet wurde, sodass Sie es nicht jedes Mal neu erstellen müssen.