索引solr,一次返回一个单词的建议

时间:2014-01-27 15:04:45

标签: solr autocomplete

我想在网络应用程序中使用solr创建一个自动提示的索引。

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

当进行搜索时,我希望建议一次只能被一个词预先出现。

所以如果我写“Pe”而不是“Peak Performance”,那么建议使用相同的起始frace。

如果我继续写作例如“Sh”而不是建议将是“Peak Performance Shirt”

如果我继续写“Peak Performance Shirt B”,建议使用“Peak Performance Shirt Blue”等等。

我尝试过这样做的目的是创建这样的文档:

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

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

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

</entity>  

当Solr找到匹配项时,会发出整个文档。

有没有办法不预先提出整个文件,一次只提一个字?

2 个答案:

答案 0 :(得分:0)

您正在做的不是自动提示,但您每次都在进行实际搜索,这就是您从搜索结果中获得结果的原因。

必须针对包含您要建议的所有可能的wird的其他字段运行自动完成。

构建一个名为“建议”的字段,其中包含例如条款:     峰     峰值性能     高峰表演衬衫     Peak Performance Shirt Blue

(这可以通过多种方式实现,并使用不同的过滤器)

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

然后只需获取结果并使用它在Products字段上运行实际搜索。

答案 1 :(得分: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>