2014-01-27 30 views
0

我想在web应用程序中使用solr进行自我暗示的索引。索引解析器,一次返回一个单词的建议

用户应该能够在网上商店中搜索产品。

当进行搜索时,我希望该建议一次只能提前一个单词。

所以,如果我写“Pe”而不是“Peak Performance”,并且建议其他人使用相同的起始方式。

如果我继续比建议写例如“嘘”将“峰值性能恤”

如果我继续写作“峰值性能恤B”比“最佳性能衬衫蓝”建议等。

我曾尝试这样的票价是这样创建文档:

<entity name="p" query="SELECT * FROM Products"> 

    <field column="ProductName" name="user_query"/> 

    <field column="Mark" name="mark"/> 

</entity> 

会发生什么事是,当Solr中找到匹配整个文档建议。

有没有办法不提示整个文件在前面,一次只有一个字?

回答

0

你在做什么不是自动暗示,但是你每次都在运行实际的搜索,这就是为什么你从搜索中得到结果。

自动完成必须针对不同的字段运行,该字段包含您要建议的所有可能的行人。

建一个名为“建议”字段将包含例如术语: 峰值 峰值性能 峰值性能恤 峰值性能衬衫蓝

(这可以通过多种方式和不同的过滤器来实现)

现在针对“建议”字段运行自动完成。你会得到你期待的结果。

然后,只需获取结果并使用它在“产品”字段上运行实际搜索。

0

您可能会发现为自动完成创建一个不同的RequestHandler是有帮助的,即使它是从同一个索引中提取的。通过这种方式,您可以定义查询哪些字段以及返回的内容 - 这样自动完成的结果看起来不像搜索结果,并且希望速度更快。

来匹配部分的话,你可能想在一个字段类型这样使用EdgeNGramFilterFactory填充字段:

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

我可以结合使用jQuery自动完成从同一个文本框,以不同的处理程序调用? – MikeAlike234

相关问题