ElasticSearch不返回常见查询字符串的任何结果(适用于不常见的字符串)

时间:2012-12-04 14:17:49

标签: elasticsearch elastica

我正在使用ElasticSearch进行一些测试,我发现它不会返回非常常见术语的结果。我认为这可能是因为它超时,耗尽内存或相关的东西,但我很困惑为什么我没有得到任何类型的错误反馈。

这是代码段:

// client & index ----------------------------------------------
$eC = new Elastica_Client();
$eI = $eC->getIndex('test_index');


// query string ---------------------------------------
$eQqs = new Elastica_Query_QueryString();
$eQqs->setDefaultOperator('AND');
$eQqs->setQuery('the'); ### <--- example of a common keyword,
// --- note that if I were to use something less common like "zoo"
// that it would return an expected result set


// search object --------------------------------------
$eQ = new Elastica_Query();
$eQ->setQuery( $eQqs );
$eQ->setFrom(1);
$eQ->setLimit(3);


// get result set -------------------------------------
$eRS = $eI->search( $eQ );


// output results ----------------------------------------
echo "total time: " . $eRS->getTotalTime() . "\n";
echo "total results: " . $eRS->getTotalHits() . "\n\n";

foreach( $eRS->getResults() as $result ) {
    print_r( $result->getData() );
}

正如评论中所提到的,如果我搜索一个不太常见的字符串,那么它工作正常,我会得到这样的东西:

total time: 292
total results: 21

Array
(
    [id] => 1234
    [name] => A day at the Zoo
...

但是,如果我搜索一些非常常见的内容,比如“the”,我从$eRS->getResults()得不到任何内容,而是我得到了这个内容:

total time: 2
total results: 0

请注意,我已经确认索引中确实有很多“the”实例。这里发生了什么?我做错了吗?如果没有,我怎么能让它吐出一些有意义的错误而不是这个看似意外的结果集?

1 个答案:

答案 0 :(得分:2)

常用词,如“a”,“an”,“and”,“are”,“as”,“at”,“be”,“but”,“by”,“for”,“if”, “in”,“into”,“is”,“it”,“no”,“not”,“of”,“on”,“或”,“”,“”,“,”“the” ,“他们的”,“然后”,“那里”,“这些”,“他们”,“这个”,“来”,“是”,“将”,“带”等所谓的停用词。这些词很常见,通常认为它们不会增加全文搜索的价值。因此,默认情况下,它们在搜索期间不会被索引和忽略。您可以更改单词列表或完全禁用它们by using non-default analyzer for your index