首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOS Elastica,全文搜索

FOS Elastica,全文搜索
EN

Stack Overflow用户
提问于 2016-05-24 07:52:01
回答 1查看 1.9K关注 0票数 0

我对elasticsearch和FOSElastica非常陌生,我想得到地图字段的相关结果,它代表了学校的名称。

我的配置:

代码语言:javascript
复制
fos_elastica:
clients:
    default: { host: localhost, port: 9200 }
indexes:
    app:
        settings:
                index:
                  analysis:
                    analyzer:
                      czech :
                        tokenizer:    standard
                        filter   :    [czech_stop, czech_stemmer ,lowercase, asciifolding]
                    filter:
                      czech_stop:
                        type:   stop
                        stopwords:  _czech_
                      czech_stemmer:
                        type:   stemmer
                        languague:  czech

        types:
            school:
                mappings:
                    name:
                        type: string
                        analyzer : czech
                        boost : 10
                persistence:
                    driver: orm
                    model:  Yearbook\SUBundle\Entity\School
                    provider: ~
                    listener:
                       immediate: ~
                    finder: ~

在“名称”字段中存储了学校名称。我使用命令行fos:elastica:search school "Hi"获得零结果,但是搜索整个word会产生很好的fos:elastica:search school "High"

我也尝试过在控制器中获得结果的不同方法,但是没有一种方法有效。我认为问题可能在配置文件中。

我没有发现任何相关的问题。谢谢你们的答复

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-24 08:43:44

找到了解决方案,

通过将custom_filter EdgeNGram添加到提交的文件中:

代码语言:javascript
复制
fos_elastica:
clients:
    default: { host: localhost, port: 9200 }
indexes:
    app:
        settings:
                index:
                  analysis:
                    analyzer:
                      custom_search_analyzer :
                        type     :    custom
                        tokenizer:    standard
                        filter   :    [czech_stop, czech_stemmer ,lowercase, asciifolding,standard]
                      custom_index_analyzer :
                        tokenizer:    standard
                        type     :    custom
                        filter   :    [czech_stop, czech_stemmer ,lowercase, asciifolding,standard,custom_filter]
                    filter:
                      custom_filter:
                          type: edgeNGram
                          side: front
                          min_gram: 1
                          max_gram: 20
                      czech_stop:
                        type:   stop
                        stopwords:  _czech_
                      czech_stemmer:
                        type:   stemmer
                        languague:  czech

        types:
            school:
                mappings:
                    name:
                        type: string
                        search_analyzer : custom_search_analyzer
                        index_analyzer : custom_index_analyzer
                        boost : 10
                    urlFriendly:
                        type: string
                persistence:
                    driver: orm
                    model:  Yearbook\SUBundle\Entity\School
                    provider: ~
                    listener:
                       immediate: ~
                    finder: ~

在控制器中获取结果列表:

代码语言:javascript
复制
            $needle=$request->request->get('needle');

        $index =$this->container->get('fos_elastica.index.app.school');

        $searchQuery=new QueryString();
        $searchQuery->setParam('query',$needle);
        $searchQuery->setDefaultOperator('OR');
        $searchQuery->setParam('fields',array('name','urlFriendly'));
        $results=$index->search($searchQuery,10)->getResults();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37407453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档