1

在我已经使用以下映射索引的 Twitter 用户描述字段中搜索“follow back”。

注意:仅突出显示部分映射。

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 时搜索时,它会给我很多结果,例如

如果你跟着我就回来!:) 100% 关注!:)

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

但是在取消注释setFieldsdefaultOperatorAND之后,它没有显示任何结果。并且通过取消注释setFieldsdefaultOperatorOR,它只向我显示在描述中具有“跟随”的结果。

Q1:为什么空白不在 setFields 上工作,而是在 _all 上工作?

使用匹配查询时

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

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

它还仅显示了两个仅在描述中具有“跟进”的结果。但是在将匹配字段更改为_all后,它会在描述字段中显示很多包含“后续”的结果

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

4

1 回答 1

1

这是因为您已根据上面的映射将“描述”字段设置为 not_analyzed。

这将导致描述字段有效负载按原样索引,并且当“描述”字段是精确搜索短语时发生匹配,在这种情况下是“跟进”

删除 "index" => "not_analyzed" 应该可以修复它。

于 2014-07-24T14:00:11.967 回答