【问题标题】:SOLR: Fuzzy search on a text field with spacesSOLR:对带有空格的文本字段进行模糊搜索
【发布时间】:2018-06-14 20:28:04
【问题描述】:

这是我的问题:我有一个由 SOLR 索引的文本字段,它是我们数据库中的用户名。我希望搜索模糊而不是完全匹配。例如;如果用户名是“krishnarayaprolu”并且我搜索时出现拼写错误“krishnIrayaprolu”,它仍应返回记录。

这对我来说很好,除非用户名中有空格。因此,用户名:“krishna rayaprolu”和搜索字符串“krishnI rayaprolu~0.5”不会返回记录。如果拼写错误以“krishna rayaprolI~0.5”结尾,则返回正常。有什么想法吗?

对于我的配置,我尝试了 WhiteSpaceTokenizerFactory 和 StandardTokenizerFactory。在搜索方面,我尝试了引号和转义空间。他们都没有帮助解决我的空间+模糊问题。我正在使用管理界面进行搜索。感谢任何指针。

【问题讨论】:

  • 您可以发布您的 solr 架构的相关部分吗?如在用户名的字段定义中
  • <field name="username" type="text_general" indexed="true" stored="true" multiValued="true"/> <fieldType name="text_general" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> </analyzer> </fieldType>

标签: solr solr4


【解决方案1】:

我有你的问题的解决方案,只需要在你的架构中添加一些字段。

创建新的 ngram 字段并将所有标题名称复制到 ngram 字段中。

当您对拼写错误的单词进行任何查询并且得到空白结果然后拆分 这个词并再次触发相同的查询,您将获得预期的结果。

Example : Suppose user searching for word "krishna rayaprolu" but type it as "krishnI rayaprolu~0.5", then 
create query in below way you will get results as expected hopefully.

**(ngram:"krishnI rayaprolu~0.5" OR ngram:"kri" OR  ngram:"kris" OR ngram:"krish" OR ngram:"krishn" OR ngram:"krishnI" OR ngram:"ray" OR ngram:"raya" OR ngram:"rayap" ..... )**

我们已经拆分了单词序列,并在字段 ngram 上触发查询。

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2013-02-18
    相关资源
    最近更新 更多