1

過去数日間、DEMO のために Neo4j embedded-db を試していましたが、ネイティブ Java API のインデックス作成、lucene クエリ、さらにはファジー検索を実行することに完全に感銘を受けました。次に、Spring Data Neo4j 4.0 を使用してこの POC を運用することにしましたが、Cypher クエリとファジー検索で問題が発生しました。

私のドメインクラス「チーム」は次のようになります。

@NodeEntity public class Team {

@GraphId Long nodeId;

/** The team name. */
@Indexed(indexType = IndexType.FULLTEXT,indexName = "teamName")
private String teamName;

public Team(){};

public Team(String name){
    this.teamName = name;
}

public void setTeamName(String name){
    this.teamName = name;
}

public String getTeamName(){
    return this.teamName;
}
}

次のようにデータベースにデータを入力しています。

Team lakers = new Team("Los Angeles Lakers");
Team clippers = new Team("Los Angeles Clippers of Anaheim");
Team warriors = new Team("Golden State Warriors");
Team slappers = new Team("Los Angeles Slappers of Anaheim");
Team slippers = new Team("Los Angeles Slippers of Anaheim");

    Transaction tx = graphDatabase.beginTx();
    try{

        teamRepository.save(lakers);
        teamRepository.save(clippers);
        teamRepository.save(warriors);
        teamRepository.save(slappers);
        teamRepository.save(slippers);
    }

私の TeamRepository インターフェイスは次のようになります。

public interface TeamRepository extends CrudRepository<Team, String>
{
    @Query("MATCH (team:Team) WHERE team.teamName=~{0} RETURN team")
    List<Team> findByTeamName(String query);

}

私のクエリは次のようになります。

List<Team> teams = teamRepository.findByTeamName("The Los Angeles Will be Playing in a state of Golden");

上記の CYPHER クエリは何も返しません。

以下のようなネイティブ Java API タイプのクエリを Spring で実行して、次の結果を取得できるようにしたいと考えています (teamIndex は、チーム名で作成した全文検索インデックスです)。

IndexHits<Node> found = teamIndex.query("Team-Names",queryString+"~0.5");.

ネイティブ Java API が見つかりました:

  • ロサンゼルス・レイカーズ
  • ロサンゼルス・クリッパーズ・オブ・アナハイム
  • ゴールデンステート・ウォリアーズ
  • ロサンゼルス・スラッパーズ・オブ・アナハイム
  • ロサンゼルス スリッパ オブ アナハイム
4

1 に答える 1

1

あなたが探しているのはSDN3にあります

SDN4 は @Indexed をサポートしていません。

いくつかの追加のクエリ メソッドを備えた IndexRepository がありますが、次のように暗号を使用することもできます。

public interface TeamRepository extends GraphRepository<Team>
{
    @Query("start team=node:teamName({0}) RETURN team")
    List<Team> findByTeamName(String query);
}

インデックスクエリを Lucene に送信します。

于 2015-07-11T00:41:39.893 に答える