【问题标题】:Apache Solr wildchard search not workingApache Solr 通配符搜索不起作用
【发布时间】:2017-09-15 14:08:52
【问题描述】:

我在 6.6.0 版中使用 Solr,在 6.6.0 版中使用 Lucene。

我想创建一个搜索框,在我输入查询时显示命中建议。

这是我的方法:

架构(我只有一个managed-schema 文件):

<copyField source="someField_a" dest="someField_a_wildcard"/>

<field name="someField_at_wildcard" type="wildcard_type" indexed="true" stored="true" />

<fieldType name="wildcard_type" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    </analyzer>
</fieldType>

someField_adynamic field

<dynamicField name="*_a" type="text_general" indexed="true" stored="true"/>

当我在输入字段中输入内容时,我确实得到了结果,但不是我想要的:

假设someField_a 是“ABC DE FG.pdf”

当我输入“ABC”时,我得到了一个结果,但随着我的继续,结果变得一团糟,我没有得到我想要的文档。

如何正确配置?

【问题讨论】:

  • 您在进行过程中遇到了什么错误?
  • @Mysterion 一方面,它只匹配完整的术语......它匹配 STRING 但不匹配 S 或 STR 或任何东西。当我输入“SO”时,我会得到以“SO”开头的结果,但是当我继续输入时,例如当我输入“SO 102”时,我会得到“SO-102”而不是“SO 102”的结果。
  • .. 您到底在搜索哪个字段? somefield_a 还是 someField_at_wildcard? admin 下的分析页面对索引名称和您的查询有什么说明?
  • @MatsLindh 我应该查询哪个字段?
  • 如果要使用为通配符类型定义的分析链,则必须查询someField_at_wildcard。任何复制操作都发生在分析之前,因此如果您查询someField_atext_general 的定义就是该字段的处理方式。另外 - 准确地说 - 这不是真正的通配符搜索(其中搜索字符串中包含 *,但行为相似)

标签: xml solr lucene


【解决方案1】:

删除whitespace 标记器。我假设您正在查找文件名?在这种情况下,不需要标记化。

当您将EdgeNGram 过滤器与whitespace 标记器结合使用时,EdgeNGram 过滤器将开始为每个标记创建 ngram。

如果是 Windows 文件,您可能希望使用 solr.LowerCaseTokenizerFactory 搜索不区分大小写的文件名。

【讨论】:

  • 好吧,我希望搜索能够为我输入的每个字符找到一些东西......而不仅仅是匹配全名
  • 好的,你应该查询使用字段类型的字段。在本例中为someField_at_wildcard。我仍然认为你不需要标记化,但如果你想要文字匹配并且字符和标记的顺序很重要。
  • 好的,谢谢您的信息!我确实在查询错误的字段。
猜你喜欢
  • 2012-08-29
  • 2021-10-10
  • 2013-11-26
  • 1970-01-01
  • 2011-03-14
  • 2016-10-25
  • 2014-05-08
  • 1970-01-01
相关资源
最近更新 更多