2013-08-07 87 views
1

我在搜索/索引中非常新,我正在使用Symfony的FosElasticaBundle向Web应用程序提供搜索功能。直到我发现默认设置只允许全文搜索时,我已经设置并运行了,没有任何问题。FOSElasticaBundle/elasticsearch部分词匹配配置

然后,我尝试了几个小时,使部分单词匹配没有运气。我尝试了nGram和edgenGram等,但我真的很困惑所有的概念。我确实尝试搜索有关概念和配置的教程,但没有真正获得答案。

这里是我的配置:

fos_elastica: 
    clients: 
     default: { host: localhost, port: 9200 } 
    serializer: 
     callback_class: FOS\ElasticaBundle\Serializer\Callback 
     serializer: serializer 
    indexes: 
     website: 
      client: default 
      finder: ~ 
      settings: 
       index: 
        analysis: 
         analyzer: 
          index_analyzer: 
           tokenizer: "nGram" 
           filter: ["lowercase", "snowball"] 
          search_analyzer: 
           tokenizer: "nGram" 
           filter: ["lowercase", "snowball"] 

         filter: 
          snowball: 
           type: "snowball" 
           language: "English" 
      types: 
       client: 

        mappings: 
         BusinessName: { boost: 10 } 
         users: 
          type: "object" 
          properties: 
           firstName: { boost: 5 } 
           lastName: { boost: 5 } 
           email: { boost: 10 } 
        persistence: 
         driver: orm # orm, mongodb, propel are available 
         model: E1\Bundle\CoreBundle\Entity\Client 
         listener: 
         provider: ~ 
         finder: ~ 

该文档是没有帮助的。任何人都可以给我一些关于如何获得部分词汇匹配集和/或让我知道我在哪里可以找到关于概念(tokenizer,过滤器,分析器)的教程?

回答

4

如果您使用默认搜索:$resultSet = $userType->search('bob');,您将拥有非常有限的ElasticSearch功能集。

默认代码执行Query::create($query);,它创建一个QueryString查询。

QueryString是伟大的,因为你可以写通配符,它​​在默认情况下在_all现场搜索,所以如果你想匹配含有小马文件,你必须使用$userType->search('Po*');

这里不需要自定义分析器。标准的已经使用空格来分隔单词和小写的所有内容。

关于文档和帮助,请记住Elastica是一个工具,这里真正的搜索引擎是ElasticSearch,所以我可以给你的最好的建议是在Json中编写和原型化你的查询。你可以使用Head插件,或者这个Chrome Extension

+0

但是在开始或者在中间或者结束时,使用('Po *')将获得所有'Po'或'po'文件,无论放置在哪里。有没有办法限制搜索,只有以'po'开头的元素才能找到? –