1

我是搜索/索引方面的新手,我正在使用 Symfony 的 FosElasticaBundle 为 Web 应用程序提供搜索功能。在我发现默认设置只允许全词搜索之前,我已经设置并运行它没有问题。

然后我尝试了几个小时来启用部分单词匹配,但没有运气。我尝试了 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: ~

该文档没有帮助。谁能告诉我如何获得部分单词匹配集和/或让我知道在哪里可以找到有关概念(标记器、过滤器、分析器)的教程?

4

1 回答 1

4

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

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

QueryString很棒,因为您可以编写通配符并默认搜索_all字段,因此如果您希望Po匹配包含Pony的文档,则必须使用$userType->search('Po*');.

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

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

于 2013-08-08T16:31:13.320 回答