Lucene:queryparser vs phrasequery或termquery

时间:2017-01-26 17:07:00

标签: java search lucene full-text-search

不使用queryparser并使用phrasequery或termquery有什么好处?在我看来,您可以使用queryparser来替换其中任何一个?

例如,如果我想搜索确切的短语,我可以这样做:

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(path));
    request.setTitle("stations.json");
    request.setDescription("File is being downloaded.....");
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
    request.setDestinationInExternalFilesDir(getApplicationContext(), null, "stations.json");
    request.setVisibleInDownloadsUi(false);


    manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    jsonRef = manager.enqueue(request);

或者如果我想搜索2个术语,我可以

String searchString = "\"word1 word2\"";
QueryParser queryParser = new QueryParser(Version.LUCENE_46,"content", analyzer);
Query query = queryParser.parse(searchString);

目前,我只使用queryparser,它对我有用,但这是使用Lucene的正确方法吗?

1 个答案:

答案 0 :(得分:0)

不使用QueryParser的主要缺点是(特别是使用Solr / Elastic时的情况):

当您创建TermQuery时,就像这样:

Query q = new TermQuery("text", "keyword")

问题是您需要手动应用分析仪/过滤器。让我们说用户类型KeyWord,如果你只是将它传递给TermQuery,你就找不到任何东西,如果你在使用小写的索引时间。当然,小套管很简单,但是您是否希望在代码中应用所有内容以进行干扰/清理等,而不是依赖于分析器/过滤器的现有功能?