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

Elastica多项搜索未返回正确结果

燕宏胜
2023-03-14

请给我一些灯。下面是我的代码:

$value = $_GET['prod'];
$filter_manufacturer = $_GET['man'];
$filter_price = $_GET['price'];
$cat = $_GET['cat'];

$queryString = new Elastica_Query_QueryString((string)$value);
$queryString->setDefaultOperator('OR')
->setFields(array('name'));

$category = explode("|", $cat);
$elasticaFilterBool = new Elastica_Filter_Bool();  
$filter2 = new Elastica_Filter_Term();
$filter2->setTerm('prodcat', array('off_furniture','home_furniture'));   

$elasticaFilterBool->addMust($filter2);
$query->setFilter($elasticaFilterBool);


// Create the search object and inject the client
$search = new Elastica_Search(new Elastica_Client());

// Configure and execute the search
$resultSet = $search->addIndex('products3')
                ->addType('product3')
                ->search($query);

foreach ($resultSet as $elasticaResult) {
            $result = $elasticaResult->getData();
            echo $result["name"]. "|";
    echo $result["prodcat"]. "|";
            echo $result["description"]. "|";
            echo $result["price"]. "|";
            echo $result["manufacturer"]. "|@";
        }    

共有1个答案

唐睿
2023-03-14

我可以看到一些潜在的问题:

>

  • 您需要使用术语筛选器,而不是术语筛选器。后者只接受一个要过滤的术语,但您要向构造函数发送两个,即[“off_furnition”,“home_furnition”]

    如果只有一个筛选器,则不需要将术语筛选器包装在布尔筛选器中!

    $prodcatFilter = new Elastica_Filter_Terms('prodcat', array('off_furniture', 'home_furniture'));
    $query->setFilter($prodcatFilter);
    

  •  类似资料:
    • 值a、b和c的组合是唯一的。 我想通过使用值a和b执行bool筛选搜索来查找“value_c”的值。 在我的代码中,我尝试如下: 我是不是漏掉了什么?会不会是因为数据集太小?我们在代码库的其他地方使用了相同的Bool Filter Elastica查询,这些查询如预期的那样工作,但是我似乎无法从这个索引中返回任何数据。 如有任何帮助,不胜感激。

    • 问题内容: 假定此搜索返回的结果包含field_a中的value1或value2和field_b中的value。 因此类似于此MySQL查询: 升级后,它将返回所有结果,其中field_b = value。查询的第一部分被完全忽略。 有修复建议吗? 问题答案: 您正在遇到这一重大变化。不再设置为。要更正此问题,请将您的 您的新查询可以这样修复:

    • 我有三个索引,它们都共享一个特定的键值对。当我用api进行全面搜索时”http://localhost:9200/_search“使用请求正文 它只返回其中两个索引的结果。我尝试使用相同的请求正文,将url更改为仅在丢失的索引中搜索”http://localhost:9200/index_name/_search“这很管用。我有什么遗漏吗? 插入所有三个索引的代码遵循相同的过程,我使用elasti

    • 我正在用Hibernate Search 4.5.1和Spring 4.0.5版本构建一个应用程序。我正在尝试索引以下类: 我正在构建一个junit测试用例,看起来如下所示: 我还注意到在luke lucene上,一些索引词的长度最多为6个字符,例如,一首歌的艺术家是“后代”,而索引中存储的词是“the”和“offspr”。第一个可以,但第二个不应该是“后代”。为什么要截断名字?

    • 问题内容: 我有一个存储过程,它检查用户是否已经存在,无论用于电子邮件的输入是什么,它随数据库的第一行一起返回。如果我手动运行select语句,我将得到正确的结果。有什么建议吗? 问题答案: 您的问题无疑在这里: 白衣 您的参数名称与列名称相同。这 可 实际工作,但规则使它这样做可能是怪异。(我认为,如果您更改引号,它可能会起作用)。 但是实际上,您应该做的是将参数重命名为其他名称:

    • 在我的弹性搜索数据库中插入6条记录后,我正在尝试一个弹性搜索示例。