如何在Ubuntu Scope中利用Filter来更加精准地提高搜索的质量

原创 2015年07月07日 14:16:34

在Ubuntu的Scope,目前正在研发一个新的Filter的功能。我们可以在我们的开发者网站找到有关filter的更多的信息。在那里你可以看到一些关于filter的介绍,但是真正地入手去利用它还是有一定的难度的。今天在我们的例程中,我们来具体展示如何利用filter实现更好的搜索。在实际的应用中,比如我们可以通过filter来实现如下的ctrip的Scope:


   


在上面的中间的图中,我们可以看到“重庆”被选中了,在第二个列中,我们可以使用我们的department来进行从一个城市到另外一个城市的搜索。


首先,我们还是利用我们熟悉的点评Scope来作为练习。我们可以在我的先前的文章“在Ubuntu OS上创建一个department 点评Scope (Qt XML)”中下载我们的代码:


https://github.com/liu-xiao-guo/dianpingdept


首先,我们在我们的SDK中,确保它是可以真确地运行的。在今天的练习中,我们想实现如下的Scope:


 `  


我们在我们的设计中加入了一个filter。它可以用来选择我们显示搜寻结果的先后次序。这样在我们的department中就可以按照我们的选中来展示搜寻的结果。


首先,我们可以看看我们的点评API接口:


我们可以看见一个“sort”的项。在我们的API中,我们可以用来选中展示的结果的方式。


为了能够设计我们的filter,我们需要做如下的修改:

query.h


class Query: public unity::scopes::SearchQueryBase {
public:
    Query(const unity::scopes::CannedQuery &query,
          const unity::scopes::SearchMetadata &metadata, QString const& scopeDir,
          QString const& cacheDir, api::Config::Ptr config);

    ~Query() = default;

    ...
private:
    ...
    
    QMap<QString, QString> m_sortPref;
    QString m_pref;
};


query.cpp


// This function is used to add filter support for my scope
void Query::initFilerData() {
    m_sortPref["1"] = "默认";
    m_sortPref["3"] = "产品评价高优先";
    m_sortPref["2"] = "星级高优先";
    m_sortPref["4"] = "环境评价高优先";
    m_sortPref["5"] = "服务评价高优先";
    m_sortPref["6"] = "点评数量多优先";
    m_sortPref["7"] = "离传入经纬度坐标距离近优先";
    m_sortPref["8"] = "人均价格低优先";
    m_sortPref["9"] = "人均价格高优先";
}

这个是一个helper方法用来初始化我们的filter所需要的数据。


void Query::run(sc::SearchReplyProxy const& reply) {
    qDebug() <<  "Run is started .............................!";

    // Initialize the scopes
    initScope();
    
    ...
    
    initFilerData();
	
    // set up the filter
    sc::Filters filters;
    const sc::CannedQuery &myquery(sc::SearchQueryBase::query());

    sc::OptionSelectorFilter::SPtr prefFilter = sc::OptionSelectorFilter::create("category",
                                             m_sortPref[DEFAULT_PREF].toStdString());

    prefFilter->set_display_hints(1);

    QMapIterator<QString, QString> i(m_sortPref);
    while (i.hasNext()) {
        i.next();
        qDebug() << i.key() << ": " << i.value();
        prefFilter->add_option(i.key().toStdString(), i.value().toStdString());
        prefFilter->active_options(myquery.filter_state());
        filters.push_back(prefFilter);
    }

    reply->push(filters, myquery.filter_state());

    if (prefFilter->has_active_option(myquery.filter_state())){
        auto o = *(prefFilter->active_options(myquery.filter_state()).begin());
        m_pref = QString::fromStdString(o->id());
        cerr << "pref id: " << o->id()  << endl;
        cerr << "label: " << o->label() << endl;
    } else {
        cerr << "no active option!" << endl;
        m_pref = DEFAULT_PREF;
    }

    qDebug() << "m_pref: " << m_pref;
    
    ...
}


我们通过上面的代码建立一个filter,同时,我们可以得到用户选择的filter的值,并存于成员变量m_pref中。

QString Query::getDeptUrl(QString dept)
{
    QMap<QString, QString> map;

    map["category"] = dept;
    map["sort"] = m_pref;
    map["limit"] = QString::number(m_limit);
    map["platform"] = "2";
    map["format"] = "xml";

    qDebug() << "m_latitude: " << m_latitude;
    qDebug() << "m_longitude: " << m_longitude;

    map["latitude"] = m_latitude;
    map["longitude"] = m_longitude;

    return getUrl( BASE_URI, map );
}


在上面的代码中,我们利用m_pref,并使之成为API请求的一部分。

这样我们就完成了我们的filter的设计工作。展示的图片在上面显示了。

所有的源码可以在地址下载:https://github.com/liu-xiao-guo/dianping_filter


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【如何让xp系统搜索更快更精准】

随着电脑里的资料越来越多,有时候我们需要找一个文件就要耗费很多时间,这样得不偿失,不如好好利用XP的搜索功能,让搜索更快更精准。   在Windows XP中按下“Win+F”或者“F3”可以打开本...

记一次利用Wireshark玩转骗子(任意qq好友IP精准定位)

正巧考完试闲下来被美女(头像是美女,是男是女不知道)骗子盯上了,聊天内容太过(无法描述,自己脑补) 1先上一点聊天内容 本来就不想多理的,既然你想查户口那我们就来吧 嘿嘿嘿!到这里我就发...

RTX解决方案-windows操作系统下需要对时间进行精准控制且需要提高运行速度的应用

RTX解决方案-给那些在windows操作系统下需要对时间进行精准控制且需要提高运行速度的应用首先,Windows XP 无法保证一个很准确的Timer Clock的触发信号,特别是在CPU的加载很重...

Angular之过滤器(filter)与作用域(scope)

Angular之过滤器(filter)与作用域(scope)

怎么在Ubuntu Scope中获取location地址信息

Location信息对很多有地址进行搜索的应用来说非常重要。比如对dianping这样的应用来说,我们可以通过地址来获取当前位置的一些信息。在这篇文章中,我们来介绍如何获取Scope架构中的位置信息。...

在Ubuntu Touch平台上开发的途径(Quick Quick, Scope, HTML 5)

目前在Ubuntu Touch提供了丰富的开发途径供开发者进行开发。它覆盖了从本地开发到Web的应用开发。下面我来介绍一下有那些开发的语言及途径可以用来开发: 1)Sco...

网站设计要学会精准定位

一、精准定位对网站设计来说非常重要,就好比人需要目标,只有精准定位自己的未来目标,才能一步一步努力实现自己的目标。企业网站建设也同样,需要定位好网站的发展方向,才能顺着这个方向向前走。 二、网站...

腾讯QQ精准TIPS消息营销介绍

Tips消息:Tips消息是一种腾讯特有的消息精准告知方式,是在QQ用户在线时,不定时触发的一个图文并茂的消息框,该消息框在屏幕窗口右下角弹出,用户不主动点击则不会在桌面消失,保持时间长,点击效率高,...

网站程序定位精准才能赢得人心

惊闻OpenCenter的bate版将于2月15日发布,基于OneThink,在OpenSNS社交产品的基础上,提炼出来的改进版本,盼星星盼月亮终于等来了它即将发布的消息,要知道,此时我正在研究怎么开...

【算法】阿里精准推广的核心算法MLR

原文:http://www.sohu.com/a/146522397_463994 阿里妈妈,是一个想让天下没有难做的营销的大数据平台,它拥有阿里巴巴集团的核心商业数据。在这里,每天有超过50亿...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)