0

我有一个存储客户用户名、电子邮件和电话号码的网络应用程序。我希望客户首先使用电子邮件、电话或用户名搜索其他用户,以了解整个 lucene 概念。然后稍后我将添加在用户中搜索他发布的项目的功能。我在 www.lucenetutorial.com/lucene-in-5-minutes.html 上关注这个例子

public class HelloLucene {
  public static void main(String[] args) throws IOException, ParseException {
    // 0. Specify the analyzer for tokenizing text.
    //    The same analyzer should be used for indexing and searching
    StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);

    // 1. create the index
    Directory index = new RAMDirectory();

    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);

    IndexWriter w = new IndexWriter(index, config);
    addDoc(w, "Lucene in Action", "193398817");
    addDoc(w, "Lucene for Dummies", "55320055Z");
    addDoc(w, "Managing Gigabytes", "55063554A");
    addDoc(w, "The Art of Computer Science", "9900333X");
    w.close();

    // 2. query
    String querystr = args.length > 0 ? args[0] : "lucene";

    // the "title" arg specifies the default field to use
    // when no field is explicitly specified in the query.
    Query q = new QueryParser(Version.LUCENE_40, "title", analyzer).parse(querystr);

    // 3. search
    int hitsPerPage = 10;
    IndexReader reader = DirectoryReader.open(index);
    IndexSearcher searcher = new IndexSearcher(reader);
    TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
    searcher.search(q, collector);
    ScoreDoc[] hits = collector.topDocs().scoreDocs;

    // 4. display results
    System.out.println("Found " + hits.length + " hits.");
    for(int i=0;i<hits.length;++i) {
      int docId = hits[i].doc;
      Document d = searcher.doc(docId);
      System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title"));
    }

    // reader can only be closed when there
    // is no need to access the documents any more.
    reader.close();
  }

  private static void addDoc(IndexWriter w, String title, String isbn) throws IOException {
    Document doc = new Document();
    doc.add(new TextField("title", title, Field.Store.YES));

    // use a string field for isbn because we don't want it tokenized
    doc.add(new StringField("isbn", isbn, Field.Store.YES));
    w.addDocument(doc);
  }
}

我希望新客户在注册时自动添加到索引中。customerId 是时间戳。那么我应该为客户详细信息的每个字段添加一个新文档,还是应该将所有字段连接成一个字符串并作为单个文档添加?请对我放轻松,我真的很新。

4

1 回答 1

1

这是开始使用 Lucene 索引机制的好地方 http://www.ibm.com/developerworks/library/wa-lucene/

在 lucene 索引文档的最后一行,它首先将其转换为 lucene 文档形式。该 lucene 文档由一组字段组成,每个字段都是一组术语。术语只不过是字节流。

要作为索引的文档传递给分析器,分析器从中形成这些术语,以及在搜索过程中匹配的这些术语关键字。

当我们执行搜索过程时,查询会通过相同的分析器进行分析,然后与术语匹配。因此,您不必为每个字段创建一个文档,而是应该为每个用户创建一个文档。

于 2013-07-05T05:54:12.280 回答