哪种数据结构或算法用于排列字典数据以进行序列搜索?

时间:2013-04-05 11:35:24

标签: java algorithm data-structures dictionary

我有一本近千万字的字典。我必须设计算法来快速搜索字符序列。

对于前。如果用户输入and,则应用必须返回包含randomsandstand等序列的字词  ...等等。

我现有的解决方案是在所有现有单词中搜索匹配的正则表达式,这是无效的。 我愿意重新构建现有数据库,缓存字典或在任何级别工作(如果需要)或者在Java中是否有一些现成的api?

2 个答案:

答案 0 :(得分:3)

http://lucene.apache.org/core/

看看这个,这应该符合您的要求。

final File INDEX_DIR = new File("index");  
try{  
    Class.forName("com.mysql.jdbc.Driver").newInstance();  
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "password");  
    StandardAnalyzer analyzer = new StandardAnalyzer();  
    IndexWriter writer = new IndexWriter(INDEX_DIR, analyzer, true);  
    System.out.println("Indexing to directory '" + INDEX_DIR + "'...");  
    indexDocs(writer, conn);  
    writer.optimize();  
    writer.close();  
} catch (Exception e) {  
    e.printStackTrace();  
}  

void indexDocs(IndexWriter writer, Connection conn) throws Exception {  
String sql = "select id, name, color from pet";  
Statement stmt = conn.createStatement();  
ResultSet rs = stmt.executeQuery(sql);  
while (rs.next()) {  
    Document d = new Document();  
    d.add(new Field("id", rs.getString("id"), Field.Store.YES, Field.Index.NO));  
    d.add(new Field("name", rs.getString("name"), Field.Store.NO,  Field.Index.TOKENIZED));  
    d.add(new Field("address", rs.getString("address"),Field.Store.NO, Field.Index.TOKENIZED));  
    writer.addDocument(d);  
  }  
}  

答案 1 :(得分:1)

我尝试使用trie(Where do I find a standard Trie based map implementation in Java?)。 根据您的要求,使用内存lucene索引也可能符合要求