2014-03-26 86 views
0

我收到供應商名稱和他們的地址作爲字符串,我在Lucene中索引,像這樣,,,,。現在,從另一個servlet接收包含供應商名稱和地址的文本。例如,「我在商店中使用信用卡XXXXX時出現問題」,或者「我的信用卡在商店中被拒絕」。我刪除了像I,the,in,problem,shop等停用詞,並用「」來清除文本。我需要從給定文本中vendor_name或區域中找到所有這些供應商。如何使用lucene搜索句子中的關鍵字

這是我如何索引供應商的詳細信息;文件中的每一行都是供應商,而且它們的詳細信息以逗號分隔。 ,,,

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

您正在添加文檔而不使用標記化,但會標記查詢,因此您在查詢與索引時間的分析中存在不匹配。由於該字段顯示爲自由文本,因此對其進行標記化對於有效搜索很重要。我完全不會指定FieldType,而只會使用TextField。您可以在查詢時使用WhitespaceTokenizer,但我認爲StandardAnalyzer是一個更好的起點。