我收到供应商名称和他们的地址作为字符串,我在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以搜索上述要求?我应该使用什么类型的查询来查找给定文本中的供应商详细信息?
答案 0 :(得分:0)
您在没有标记化的情况下添加文档,但正在对查询进行标记,因此在查询与索引时的分析中存在不匹配。由于该字段似乎是自由文本,因此将其标记为有效搜索非常重要。我建议只使用TextField
,而不是完全指定FieldType。您可以在查询时使用WhitespaceTokenizer
,但我会将StandardAnalyzer
视为更好的起点。