使用查询字符串搜索不在特定字段上工作的空间

时间:2014-07-24 10:38:50

标签: search elasticsearch elastica

在我已编入索引的Twitter用户描述字段中搜索“跟进”,并进行以下映射。

注意:仅突出显示某些映射。

1

'analysis' => array(
        'analyzer' => array(    
                'myanalyzer' => array(
                        "type"  =>  "standard",
                        'stopwords' => '_none_',
                ),
        )
  )

2

$mapping->setParam('index_analyzer', 'myanalyzer'); 
$mapping->setParam('search_analyzer', 'myanalyzer');

3

'description'  => array('type' => 'string', "index" => "not_analyzed"),

4

//search something
$queryString = new \Elastica\Query\QueryString();
$queryString->setDefaultOperator( "AND" );  
// $queryString->setFields(array("user.description"));
$queryString->setQuery('follow back');

当setFields被评论时搜索时,它给了我很多结果,比如

  

如果您跟随ILL后退! :) 100%跟进! :)

     

跟着我,我跟着回来:) instagram:juliemar25我跟着回来了

但是,在将 setFields defaultOperator 取消注释为 AND 之后,它将显示无结果。 通过取消注释 setFields defaultOperator OR ,它只显示“关注”的结果其他

Q1:为什么空格不能在setFields上工作而是使用_all?

使用匹配查询时

$matchQuery = new \Elastica\Query\Match();
$matchfield = "user.description";
$queryToMatch = "follow back";

$matchQuery->setFieldQuery($matchfield, $queryToMatch); 

它仅显示两个仅在描述中“后退”的结果。但是在将字段更改为 _all 之后,它会在说明字段中显示包含“后退”的大量结果

Q2。为什么会这样?如何搜索空格分隔的单词?

1 个答案:

答案 0 :(得分:1)

这是因为你已经设置了"描述"根据上面的映射不要分析字段。

这将导致描述字段有效负载按原样索引,并且当'描述'字段是一个精确的搜索短语,在这种情况下是"后面的"

删除"索引" => " not_analyzed"应该解决它。