【问题标题】:Playframework + Lucene: How to search partial words?Playframework + Lucene:如何搜索部分单词?
【发布时间】:2012-02-03 00:03:27
【问题描述】:

我正在尝试在我的应用程序中启用部分单词搜索。我想要发生的是,如果有人搜索说框架并且索引列将“playframework”作为项目之一,那么它应该被检测为命中。

这是我尝试过的:

play.modules.search.Query q = Search.search("index:*" + JavaExtensions.noAccents(by).toLowerCase() + "*", Location.class);

但我得到一个错误: 无法解析 'index:*framework* : '*' 或 '?'不允许作为 WildcardQuery 中的第一个字符

有什么想法吗?

【问题讨论】:

  • 您永远不应该像前面所说的那样以“*”开始搜索。您应该定义过滤器以匹配部分(可能使用 NGramFilterFactory)。有关相关问题,请参阅:stackoverflow.com/questions/4824954/…,第二个答案(由 Mauricio Scheffer 撰写)应该有效。不要忘记重新索引!

标签: lucene playframework


【解决方案1】:

看来你需要做一个fuzzy search。在您的情况下,以下代码应该可以满足您的需要:

play.modules.search.Query q = 
  Search.search("yourFieldInLocationClass:" + queryString + "~", Location.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多