如何使用lucene搜索句子中的关键词

时间:2014-03-26 11:25:50

标签: java lucene full-text-search

我收到供应商名称和他们的地址作为字符串,我在Lucene中索引像这样,,,,。现在,从另一个servlet我收到带有供应商名称和地址的文本。例如,"我在商店使用信用卡xxxxx时遇到问题,"或者,"我的信用卡在商店中被拒绝,"。我删除像我,在,问题,商店等的停止词,并用" &#34 ;.我需要从给定文本中的vendor_name或区域中找到所有这些供应商。

这是我索引供应商详细信息的方式;文件中的每一行都是供应商,其详细信息用逗号分隔。 ,,,

FieldType keywordFieldType = new FieldType();
        keywordFieldType.setStored(true);
        keywordFieldType.setIndexed(true);
        keywordFieldType.setTokenized(false);
        writer = new IndexWriter(dir, iwc);
        BufferedReader reader = new BufferedReader(new FileReader(
                VENDOR_DETAILS));
        String line = reader.readLine();
        while (line != null) {
            Document document = new Document();
            document.add(new Field("content", line.toLowerCase(),
                    keywordFieldType));
            writer.addDocument(document);
            line = reader.readLine();
        }
        writer.commit();

这是我搜索索引的方式,

QueryParser queryParser = new QueryParser(VERSION, "content",
            new WhitespaceAnalyzer(VERSION));

    String special = "content:" + stringToQuery.trim();
    try {
        if (searcherManager == null) {
            searcherManager = new SearcherManager(
                    FSDirectory.open(new File(INDEX_DIRECTORY)),
                    new SearcherFactory());
        }
        searcher = searcherManager.acquire();
        TopDocs docs = searcher.search(queryParser.parse(special), 100);
        int hitCount = docs.totalHits;

如何查询Lucene以搜索上述要求?我应该使用什么类型的查询来查找给定文本中的供应商详细信息?

1 个答案:

答案 0 :(得分:0)

您在没有标记化的情况下添加文档,但正在对查询进行标记,因此在查询与索引时的分析中存在不匹配。由于该字段似乎是自由文本,因此将其标记为有效搜索非常重要。我建议只使用TextField,而不是完全指定FieldType。您可以在查询时使用WhitespaceTokenizer,但我会将StandardAnalyzer视为更好的起点。