2017-01-17 13 views
0

ランダム100のムービーを見つけてムービーIDを使用して結果をソートしようとしています。 ---------------------Neo4jムービーデータベースのCypher結果の順序が適切な方法で表示されない

タイトル:このため、私は、クエリの下に使用しています:

MATCH (movie:Movie) 
WHERE RAND() < 0.3 
RETURN movie.title as title,movie.id AS id 
ORDER BY id DESC 
LIMIT 100 

しかし、結果はOKではありません-------------------- id

Major League ----------------------- ---- 9942

エル・チュパカブラ------------------------- 9937

ハレッツヴィレ-------- ---------------------- 9935

Sleuth ------------------------------------- 993

リンガー - ----------------------------- 9927

BloodRayne --------------- -------------- 9926


993は、リストの一番下にする必要がありますが、それは間違った位置にあります。誰も私にそれを解決する方法を提案することができますか?

+1

表示される結果は、*昇順*(降順ではない)の英数字の順です。 'DESC'を指定してもよろしいですか? – cybersam

+0

出力を再度追加しました。これを確認してください –

答えて

0

ノードのIDプロパティ値は、整数ではなく文字列です。 "102"という文字列は、 "102"という接頭辞が付いた文字列の前に置かれます。

ノードでidプロパティを設定する場合は、文字列ではなく整数で動作するように引用符を付けないでください。

どこから映画データベースを入手しましたか、どのバージョンのNeo4jを使用していますか? Neo4j 3.1では、ムービーグラフにidプロパティはありません。

EDIT

あなたのリンクからサンプルデータベースをダウンロードした後、私はそれが文字列IDの値を使用して確認することができます。このため、このプロパティの比較と並べ替えは数値ではなく文字列ベースになります。

実際のグラフでは、最初からプロパティに正しいデータ型を使用していることを確認したいと考えています。

すべてのidプロパティを整数に変換する必要がない場合は、クエリで作業している値を変換し、それらの値に基づいてソートすることができますそれらをグラフに保存しないので、クエリのソートは正確ですが、プロパティは文字列ベースのままです)。あなたのクエリが明示的に最初の結果を順序付けするため

MATCH (movie:Movie) 
WHERE RAND() < 0.3 
RETURN movie.title as title,movie.id AS id 
ORDER BY toInt(id) DESC 
LIMIT 100 

EDIT 2

だけ高い値を得ている理由は、注文した結果の上位100を取り、です。あなたはこれを避けたい場合は、最初の100件の結果を取るし、それらを注文:

MATCH (movie:Movie) 
WHERE RAND() < 0.3 
WITH movie LIMIT 100 
RETURN movie.title as title,movie.id AS id 
ORDER BY toInt(id) DESC 

あなたが選んだ映画のIDSでより多くの変化をしたい場合は、あなたが乱数にしきい値を変更したいと思います。今では、映画ノードの30%が限界までの結果セットに含まれています。より低い値を選ぶことをお勧めします。

+0

ありがとう、私はそれを得た。私はここからデータベースをダウンロードしました:https://neo4j.com/developer/example-data/#_the_data_sets このデータベースでこの問題をどうやって解決できますか? 私はneo4jを使用しています。3.1.0 –

+0

質問のために役立つはずのソリューションを追加しました – InverseFalcon

+0

ありがとうございます。私はこれを使用してチェックしました。しかし、この場合、リストには50、数千のムービーが含まれていますが、値はより高い値からのみ得られ、値は互いに近くなりすぎます。 –

関連する問題