【问题标题】:Lucene Query to match multiple words like mysql's "LIKE %my string%"Lucene 查询以匹配多个单词,例如 mysql 的 "LIKE %my string%"
【发布时间】:2013-12-07 04:57:39
【问题描述】:

我正在尝试在 Lucene 中匹配多个单词,就像在 MySQL 中一样。

这比我想象的要难:

用 PHP 编写: 我对完美匹配的查询是:

$words = explode($words, " ");
(text:(' . implode(" ", $words) . ')

但如果文本是“我写的一堆单词”,则在我写完所有内容之前它不会匹配

是否有任何方法可以强制 Lucene 的行为与 MySQL 的“%a bunc%”完全一样并检索空洞短语?

提前致谢

编辑:

我没有直接使用 Lucene,我使用 Solr 作为 REST 服务。所以我正在寻找“普通语法”来解决这个问题,例如:select?q=: 如果我有很多单词,查询是 : (全选)在文本字段中,如前所述,我找不到任何方法将它们视为一个独特的词。 如果它是一个独特的词,我可以执行“text:(beginningOfW*)”,它会找到它, 如果是多个单词,如果我写 "text:(beginning Of W*)" 它只会找到以 W 开头的单词,而忽略其他单词。

【问题讨论】:

标签: php mysql lucene


【解决方案1】:

是的,Lucene 是全文搜索引擎 API。我认为您正在寻找 WildCardQuery:

Term term = new Term("whichField", "searchString");
Query query = new WildcardQuery(term);
Hits hits = indexSearcher.search(query);

【讨论】:

  • 对不起,如果我之前没有指定,但我正在寻找“查询语法,看看编辑。非常感谢
  • 那么你期望 "text:(beginning Of W*)" 匹配什么?它会匹配短语,如:世界的开始或风的开始等。
  • 绝对不行,它只会匹配 text:W* 或 text:Of 或 text:beginning 或类似的东西
  • 你试过 q= "text:\"beginning of w\"" 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
相关资源
最近更新 更多