【问题标题】:Lucene index HTML HeadingsLucene 索引 HTML 标题
【发布时间】:2018-07-17 08:37:53
【问题描述】:

我想索引 HTML 文件,并在收到我的搜索结果后能够跳转到相应的标题。

我目前使用 HTMLStripCharFilter 来解析我的文件。

public class MyAnalyzer extends Analyzer {
  public MyAnalyzer() {
    super();
  }

  @Override
  protected Reader initReader(String fieldName, Reader reader) {
    return new HTMLStripCharFilter(reader);
  }

  @Override
  protected TokenStreamComponents createComponents(String fieldName) {
    StandardTokenizer source = new StandardTokenizer();
    TokenStream result = new StandardFilter(source);
    result = new LowerCaseFilter(result);
    return new TokenStreamComponents(source, result);
  }
}

indexMyFile 方法获取一个 HTML 文件的路径并创建索引,但它目前只存储文件名。

private static void indexMyFile(IndexWriter writer, Path file,
  long lastModified) throws IOException {
try (InputStream stream = Files.newInputStream(file)) {
  Document doc = new Document();

  Field pathField = new StringField("path", file.toString(),
      Field.Store.YES);
  doc.add(pathField);
  doc.add(new TextField("contents", new BufferedReader(
      new InputStreamReader(stream, StandardCharsets.UTF_8))));

  writer.addDocument(doc);
}

我的解决方案是在这个 Lucene 文档中添加一个新的 TextField,但我目前不知道代码的这一点的标题。 有没有办法使用 Lucene,所以我可以将内容链接到当前的标题和文件名?还是我必须使用 JSoup 或 JTidy 并将我的 indexMyFile 方法传递给标题后面的文本并为每个标题创建一个 Lucene 文档,类似于this post

【问题讨论】:

    标签: java html lucene


    【解决方案1】:

    我使用JSoup 来解析 HTML 标签。然后,我没有为整个文件编制索引,而是为每个标题创建了一个包含多个字段的文档:

    private void indexString(Path path, String title, String heading,
      String content) throws IOException {
      Document doc = new Document();
    
      doc.add(new Field("title", title, TextField.TYPE_STORED));
      doc.add(new Field("heading", heading, TextField.TYPE_STORED));
      doc.add(new StringField("path", path.toString(), Field.Store.YES));
      doc.add(new StringField("urlHeading", urlHeading, Field.Store.YES));
      doc.add(new TextField("contents", content, Store.NO));
      writer.addDocument(doc);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2012-09-16
      • 2016-03-05
      • 2021-05-27
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多