簡體   English   中英

Lucene 3.5.0 QueryParser 找不到任何結果,而以編程方式生成的查詢卻找到了

[英]Lucene 3.5.0 QueryParser doesn't find any results while programmatically generated query does

這最近一直困擾着我,我似乎無法在任何地方找到合適的解釋。

如果我運行一個使用查詢 API 構建的查詢,它運行得非常好。

TermQuery sourceQuery = new TermQuery(new Term("source", "CNN"));

運行results = searcher.search(sourceQuery, 30)並檢查results.totalHits顯示值為 159。

但是,在同一個程序中,我設置了一個QueryParser (我的默認字段稱為text ):

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
QueryParser parser = new QueryParser(Version.LUCENE_35,
      "text", analyzer);

並輸入命令行查詢

source:CNN

我沒有得到任何結果。 Luke上運行這個命令確實給了我一個結果。 有誰知道發生了什么事?

您可能為 QueryParser object 使用了錯誤的分析器。請注意:

  1. 當您構建自己的 Term object 時,該術語的文本為大寫。
  2. 您將 StandardAnalyzer 提供給 QueryParser,因此術語的文本被轉換為小寫(由 StandardAnalyzer)。
  3. Luke 的默認分析器是 KeywordAnalyzer,它會保留您指定術語的大小寫(即大寫)。

我想當您為文本編制索引時,您的術語是大寫的(或變成大寫的)。 這解釋了為什么方法 1 和 3 有效,但方法 2 無效,因為案例不匹配。 一般來說, 在索引和搜索時使用同一個 Analyzer是個好主意,或者至少要注意大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM