2015-07-10 92 views
1

在過去的幾天裏,我在嘗試使用Neo4j嵌入式數據庫進行DEMO測試,並對原生Java API的索引,lucene查詢甚至設法做模糊搜索。然後我決定將這個POC用Spring Data Neo4j 4.0生成,但遇到了Cypher查詢和模糊搜索的問題。Neo4j:Spring Data Neo4j中的Native Java API(或等效的密碼查詢)

我的域類 「團隊」 看起來是這樣的:

@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類型的查詢在春天像下面的一個,並得到以下結果。(teamIndex是我對球隊的名字創建了全文搜索索引)

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

本地Java API發現:

  • 洛杉磯湖人
  • 阿納海姆的
  • 洛杉磯快船阿納海姆的
  • 金州勇士
  • 洛杉磯輕手輕腳
  • 洛杉磯拖鞋阿納海姆的

回答

1

你在找什麼g代表SDN3

SDN4不支持@Indexed。

有一些額外的查詢方法的IndexRepository,但你也可以使用暗號是這樣的:

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

這將索引查詢發送到Lucene的。

+0

隨着SDN4全文添加被推遲:http://docs.spring.io/spring-data/neo4j/docs/4.0.0.RC1/reference/html/#_full_text_indexes。但Neo4j 2.3將添加更多的字符串查找功能,以便大多數應該可以開箱即用。 –

+0

cypher @Query(「start team = node:teamName({0})RETURN team」)的搜索teamrepository.findByTeamName(「洛杉磯將在黃金狀態下播放」)引發NPE org.apache。 lucene.util.SimpleStringInterner.intern(SimpleStringInterner.java:54)。我發現了類似的線程:http://forum.spring.io/forum/spring-projects/data/nosql/112078-repository-derived-query-not-working-with-strings-that-have-spaces。另外如果teamName沒有被索引,我得到一個錯誤,指出索引'teamName'不存在 – codebin