繁体   English   中英

如何使用Lucene在句子中搜索关键字

[英]How to search the keywords inside a sentence using lucene

我收到供应商名称及其地址作为字符串,我在Lucene中将其索引为,,,。 现在,从另一个servlet中,我收到包含供应商名称和地址的文本。 例如,“我在商店中使用信用卡xxxxx时遇到问题”,或“我的商店中的信用卡被拒绝”。 我删除了诸如“我”,“在”,“在”,“商店”等中的停用词,并使用“”显示了清晰的文字。 我需要从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来搜索以上要求? 我应该使用哪种类型的查询来查找给定文本内的供应商详细信息?

您要添加的文档没有标记化,但是正在标记化查询,因此查询和索引时的分析不匹配。 由于该字段似乎是自由文本,因此标记化标记对于有效搜索很重要。 我不建议完全指定FieldType,而建议仅使用TextField 您可以像在查询时一样在两者上同时使用WhitespaceTokenizer ,但是我认为StandardAnalyzer是更好的起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM