4

我正在使用 Zend Lucene 为 php 网站构建搜索功能,但遇到了问题。我的网站是店长(类似的东西)。

例如,我有一家名为“FooBar”的商店,但我的访客搜索“Foo Bar”并获得零结果。此外,如果一家商店被命名为“Foo Bar”并且访客搜索“FooBar”,则什么也找不到。

我试图搜索“foobar~”(模糊搜索)但没有找到名为“Foo Bar”的文章

是否有一种特殊的方式来构建索引或进行查询?

4

4 回答 4

2

选项 1:在不同点将输入查询字符串分成两部分并搜索它们。例如。在这种情况下,查询将是 (+fo +bar) OR (+foo +bar) OR (+foob +ar) 问题是这种标记化假设输入查询字符串中有两个标记。此外,您可能会得到额外的、可能不相关的结果,例如 (+foob +ar) 的结果

选项 2:在索引和查询时使用 n-gram 标记化。虽然索引“foo bar”的标记将是 fo、oo、ba、ar。使用 foobar 搜索时,标记将是 fo、oo、ob、ba、ar。使用 OR 作为运算符搜索将在顶部为您提供具有最大 n-gram 匹配的文档。这可以通过NGramTokenizer实现

于 2009-04-29T10:02:52.613 回答
1

为最常见的名称混淆手动添加索引条目。让您的客户在特殊表格上输入。

于 2009-05-07T14:25:19.890 回答
0

你试过“*foo* AND *bar*”还是“*foo* OR *bar*”?它在 Ferret 中工作,我读到它是基于 Lucene 的。

于 2009-04-29T07:23:43.510 回答
0

如果您不关心性能,请使用 WildcardQuery (性能明显更差):

new WildcardQuery( new Term( "propertyName", "Foo?Bar" ) );

对于零个或多个字符,使用'*',对于零个或一个字符,使用'?'

如果性能很重要,请尝试使用 BooleanQuery。

于 2009-05-01T00:40:48.157 回答