[英]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.