为什么索引器不搜索波斯文件?

时间:2016-02-05 09:00:21

标签: java indexing encoding lucene

我使用lucene 3来索引一些这样的txt文件。

$xml = simplexml_load_string($your_html_here);
$images = $xml->xpath("//img/@src");
foreach ($images as $image) {
    $parsed = parse_url($image);
    print_r($parsed);
}

getHitCount函数返回英文单词的命中数,但是按波斯语单词,它返回零!

 public static void main(String[] args) throws Exception {

    String indexDir = "file input";
    String dataDir = "file input";
    long start = System.currentTimeMillis();

    indexer indexer = new indexer(indexDir);
    int numIndexed, cnt;
    try {
        numIndexed = indexer.index(dataDir, new TextFilesFilter());

        cnt = indexer.getHitCount("mycontents", "شهردار");
        System.out.println("count of search in contents: " + cnt);
    } finally {
        indexer.close();
    }
    long end = System.currentTimeMillis();
    System.out.println("Indexing " + numIndexed + " files took "
            + (end - start) + " milliseconds");

}

如何在我的项目中设置utf-8?我使用netbeans并创建一个简单的java项目。 我只需要在文件中进行简单的搜索!

这是我的索引器类:

 public int getHitCount(String fieldName, String searchString)
        throws IOException, ParseException {

    IndexSearcher searcher = new IndexSearcher(directory);

    Term t = new Term(fieldName, searchString);
    Query query = new TermQuery(t);

    int hitCount = searcher.search(query, 1).totalHits;
    searcher.close();
    return hitCount;
}

1 个答案:

答案 0 :(得分:0)

我怀疑问题本身不是Lucene的编码,而是FileReader。来自FileReader文档:

  

此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的。

在这种情况下,默认字符编码可能不合适。

而不是:

doc.add(new Field("mycontents", new FileReader(f)));

尝试(假设要编入索引的文件是UTF-8编码):

doc.add(new Field("mycontents", new InputStreamReader(new FileInputStream(f), "UTF8")));