2012-02-23 102 views
3

我有一个使用Keyword Tokenizer(整个词是令牌)的字段类型,带有小写和边n-gram过滤器,例如, “Robert Longo”存储为“r”,“ro”,...,“robert l”,“robert lo”等。这一切在分析管理页面上似乎都按预期工作。准确的短语匹配n-gram,但没有找到结果?

但是当我搜索“罗伯特长”(带引号)时,即使这是一个令牌的精确匹配,我也没有得到任何结果。当我在没有引号的情况下搜索时,我的术语被预先标记,并且匹配所有的“罗伯特”和所有的“l”,而不仅仅是“罗伯特l”。我是否需要指定一个通配符来告诉它该术语还有更多?

从架构:

<fieldType name="edge_text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" /> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

我的目标是有东西从与被赋予什么开始我们的存储术语返回词组匹配,因此精确匹配和条款的顺序是至关重要的。

任何想法?

+1

它应该正常工作,我可以得到结果。你可以测试具体领域?如果字段名称是edge_text并且已被索引,则可以尝试q = edge_text:“robert long” – Jayendra 2012-02-25 12:57:43

+0

谢谢,Jayendra。我的字段实际上被称为“suggest2”,我尝试了以下变体:'/ solr/select /?q =“rob + l”&qf = suggest2&fl = suggest2'。也许我错误地提出了我的疑问? – tedders 2012-02-27 15:18:06

+0

对不起,上面的查询来自我之后尝试的其他内容。显然,“rob l”不匹配。我改变了我的查询,只是q =建议2:“罗伯特长”像你所建议的,它毕竟工作。我想尝试使用qf而不是在查询中指定字段是问题。再次感谢您的帮助,如果您转贴为答复,我会接受。 – tedders 2012-02-27 19:01:48

回答

1

它应该工作正常,我可以得到结果。
你可以用特定的字段进行测试吗?如果字段名称是edge_text并被索引,则可以尝试q=edge_text:"robert long"

相关问题