2017-09-15 69 views
0

我在版本6.6.0中使用Solr,版本6.6.0中使用Lucene。Apache Solr wildchard搜索不起作用

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

这里是我的方法:

架构(我只有一个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”时,我得到了一个结果,但是当我走的时候,结果变得混乱起来,我没有得到我想要的文档。

如何正确配置?

+0

你一直沿着什么走向错误? – Mysterion

+0

@Mysterion一件事,它只匹配完整的条件......它匹配STRING,但不是S或STR或任何东西。当我输入“SO”时,我会得到以“SO”开头的结果,但是当我继续时,例如当我输入“SO 102”时,我用“SO-102”结果结果,但不结合“SO 102”。 – user3629892

+0

..你究竟在哪个领域搜索? 'somefield_a'或'someField_at_wildcard'? admin下的分析页面对索引名称和查询有什么影响? – MatsLindh

回答

0

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

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

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

+0

那么,我想搜索找到我输入的每个字符somethig ...而不仅仅匹配全名 – user3629892

+0

好的,你应该查询使用字段类型的字段。在这种情况下是'someField_at_wildcard'。我仍然认为你不需要标记,但是如果你想有字面匹配和字符和标记的顺序很重要。 – drjz

+0

好的,谢谢你的信息!我确实在错误的领域询问。 – user3629892