当前位置: 首页 > 知识库问答 >
问题:

弹性过滤器不工作

羊渝
2023-03-14
    $elasticaIndex = $elasticaClient->getIndex('users');
    // Create the index new
    $elasticaIndex->create(
            array(
        'analysis' => array(
            'analyzer' => array(
                'indexAnalyzer' => array(
                    'type' => 'custom',
                    'tokenizer' => 'standard',
                    'filter' => array('lowercase', 'lb_ngram')
                ),
                'searchAnalyzer' => array(
                    'type' => 'custom',
                    'tokenizer' => 'standard',
                    'filter' => array('standard', 'lowercase', 'lb_ngram')
                )
            ),
            'filter' => array(
                'lb_ngram' => array(
                    "max_gram" => 10,
                    "min_gram" => 1,
                    "type" => "nGram"
                )
            )
        )
            ), true
    );
    //Create a type
    $elasticaType = $elasticaIndex->getType('profile');


    // Set mapping
    $mapping->setProperties(array(
        //'id' => array('type' => 'integer', 'include_in_all' => FALSE),
        'firstName' => array('type' => 'string', 'include_in_all' => TRUE),
        'lastName' => array('type' => 'string', 'include_in_all' => TRUE),
        'username' => array('type' => 'string', 'include_in_all' => TRUE),
        'bio' => array('type' => 'string', 'include_in_all' => TRUE),
        'thumbnail' => array('type' => 'string', 'include_in_all' => FALSE),
        'location' => array('type' => 'string', 'include_in_all' => TRUE),
    ));
        $elasticaQueryString = new Elastica\Query\QueryString();

        //'And' or 'Or' default : 'Or'
        $elasticaQueryString->setDefaultOperator('AND');
        $elasticaQueryString->setQuery($term);

        // Create the actual search object with some data.
        $elasticaQuery = new Elastica\Query();
        $elasticaQuery->setQuery($elasticaQueryString);
            $elasticaFilterLocation = new \Elastica\Filter\Term();
            //search 'location' = $region;
            $elasticaFilterLocation->setTerm('location', $region);           
            $elasticaQuery->setFilter($elasticaFilterLocation);
            $elasticaResultSet = $elasticaIndex->search($elasticaQuery);                
            $elasticaResults = $elasticaResultSet->getResults();

共有1个答案

程禄
2023-03-14

我也有同样的问题,我通过改变映射中这些字段的分析器来修复它。现在我必须重建我的索引等...不要试图在不重建索引的情况下找到改变映射或分析器的解决方案,你做不到。

lc_analyzer' => array(
   'type' => 'custom',
   'tokenizer' => 'keyword',
   'filter' => array('lowercase')
),

对于映射:

'location' => array('type' => 'string', 'analyzer' => 'lc_analyzer'),

然后,查询像

 $elasticaFilterBool = new \Elastica\Filter\Bool();                
 $filter1 = new \Elastica\Filter\Term();
 $filter1->setTerm('location', array(strtolower($region)));                
 $elasticaFilterBool->addMust($filter1);
 $elasticaQuery->setFilter($elasticaFilterBool);
 类似资料:
  • 我试图过滤查询使用范围按日期,但它不工作。如果我使用gt, gte, lt, lte它返回零结果。如果我只使用gt或lt,它返回一些结果,但过滤器不工作。 我检查了uri上的数据类型http://mydomain.local:9200/logstash-2014.09.09/_mapping?pretty=true字段类型是正确的: 以下是我在ElasticSearch中索引的结果示例: 下面是我

  • 这是回应的一部分 我有联系人号码和名字 现在我的第二个查询->我正在使用术语筛选器查询上面的联系电话

  • 我试图使用过滤器聚合来支持前端的多选择方面值。 我有颜色和深度滤镜。 滤色器保存值:黑色(5)、蓝色(3)、红色(2) 深度过滤器保持值:70mm(3)、60mm(5)、50mm(3) 当我在滤色器中选择黑色时,所有其他选项(蓝色,红色)都没有响应。 我尝试添加 谢了,Sree。

  • 当我尝试使用时,我得到一个异常。下面是堆栈跟踪: 编辑二:

  • 在过去的三天里,我一直在与错误“跨源请求被阻止:相同的源策略不允许读取http://localhost:8080/demomongo/templateapp/login上的远程资源。”(原因:缺少CORS头'Access-Control-Allow-Origin')。