【发布时间】: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_a 是dynamic 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_a,text_general的定义就是该字段的处理方式。另外 - 准确地说 - 这不是真正的通配符搜索(其中搜索字符串中包含*,但行为相似)