Pau*_*opf 2 lucene.net search-engine
Lucene不支持开箱即用,所以我需要一些帮助来构建我的查询.
可以说我有一个字段值为"开发"的文档
我希望为"Dev"和"lop"搜索返回此文档.
也许创建两个查询?
"*keyword"
Run Code Online (Sandbox Code Playgroud)
和
"keyword*"
Run Code Online (Sandbox Code Playgroud)
和
"keyword"
Run Code Online (Sandbox Code Playgroud)
?
你会怎么用多个单词来做这件事?你会将句子/搜索分成单词列表并为每个单词做前面的例子吗?
什么你问是,如果我理解正确,没有任何大规模的搜索引擎是可行的.
Lucene使用term-document矩阵和倒置文件技术创建关键字索引(参见底部的链接).一个完全成熟的字符串匹配可能是非常好的,但它不能扩展:你将永远无法在可接受的时间内查询大小合适的索引(比如说多于几十个/几百个文档).
不过,这里有两个可能有帮助的想法......
音节标记化
使用"开发"回到您的示例.只要你对让用户搜索音节感到满意,我想你可以做点什么.您必须创建使用标记生成器,根据其音节拆分索引中的单词,并在音节上创建数据库索引.(我不确定是否有内置的英语语言标记器可以做到这一点并且自己编写一个可能很棘手......)
需要注意的重要一点是:
如果要索引完整的单词和单独的音节,索引的大小将比仅索引其中一个的大得多.
但是,我不建议仅索引音节.如果你还想让你的用户搜索完整的单词'Develop'(我猜你想要的话),这将导致两个带有逻辑的查询和它们之间的查询,即<'dev'和'lop'>.尽管Lucene在查询中支持这种逻辑结构,但它们非常昂贵.我个人在过去使用Lucene中的逻辑查询遇到了一些麻烦.
遏制
另一种方式以某种方式达到你正在尝试的东西可能是使用一种残酷的词干(http://en.wikipedia.org/wiki/Stemming)来阻止他们的第一个音节.(这将允许搜索'dev'而不是'lop'...)
同样,我不认为这样的词干功能已经在Lucene中了.为自己写一个将是一个痛苦,涉及与/导入巨大的词典.
链接
如果您不了解搜索引擎内部,可能会查看这些内容:http:
//en.wikipedia.org/wiki/Index_%28search_engine%29
http://en.wikipedia.org/wiki/Vector_space_model
http:/ /en.wikipedia.org/wiki/Inverted_file
http://en.wikipedia.org/wiki/Term-document_matrix
http://en.wikipedia.org/wiki/Tf-idf