<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Khanh Tran</title>
    <description>The latest articles on DEV Community by Khanh Tran (@khanhtc1202).</description>
    <link>https://dev.to/khanhtc1202</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F79095%2F525d1ba1-4ed9-42c7-9b92-76c580380ecc.jpeg</url>
      <title>DEV Community: Khanh Tran</title>
      <link>https://dev.to/khanhtc1202</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khanhtc1202"/>
    <language>en</language>
    <item>
      <title>Which strategies do you choose when searching something?</title>
      <dc:creator>Khanh Tran</dc:creator>
      <pubDate>Wed, 07 Nov 2018 17:37:31 +0000</pubDate>
      <link>https://dev.to/khanhtc1202/which-strategies-you-choose-when-searching-something-moc</link>
      <guid>https://dev.to/khanhtc1202/which-strategies-you-choose-when-searching-something-moc</guid>
      <description>&lt;p&gt;One of the most thing we do on the internet is searching for something, everyone has their own "strategy" when they want to search. In my case it's:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search on Google :))&lt;/li&gt;
&lt;li&gt;Check for answer in the first page's result, if not move to the second page.&lt;/li&gt;
&lt;li&gt;Check for answer in the second page's result.&lt;/li&gt;
&lt;li&gt;If I still don't found any useful answer in second page of Google search's result, move to Bing and do the same thing I did in Google search.&lt;/li&gt;
&lt;li&gt;If still not found, move to another search engine such as Yandex, Ask, Duckduckgo,...&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Of course, everyone (maybe by region) has their own favorite search engine. Due to that is your favorite search engine, it works really well and suits with your task. But in some cases, it may not. Because it's search engine for everybody, so in some cases, the returned value is not the result you want but the most common result.&lt;/p&gt;

&lt;p&gt;For example, I tried to search about &lt;code&gt;yasuhiro matsumoto&lt;/code&gt; (&lt;a class="mentioned-user" href="https://dev.to/mattn"&gt;@mattn&lt;/a&gt; - one of my idol on Github) but it returned &lt;code&gt;yukihiro matsumoto&lt;/code&gt; (ruby's creator) at the first rank of results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wrhmhp9tf6nq2rsry7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wrhmhp9tf6nq2rsry7n.png" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I tried on Bing, the result are worse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuixau09n6btb9e5ihs3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuixau09n6btb9e5ihs3d.png" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the return from Ask seems better but still does not give what I want at first rank.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna7mzp53tnh39jaudphe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna7mzp53tnh39jaudphe.png" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I add a simple filter: pull all the other search engine's results and merge it by my defined rule (for example, get all cross matched urls - urls that appeared on two or more search engine's results would be a trusted urls).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93h191tj57zpzo1bmg8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93h191tj57zpzo1bmg8y.png" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a simple program implement above idea, it's called &lt;code&gt;Boogeyman&lt;/code&gt; - a console application (I'm a fan of cli tool). Source code on &lt;a href="https://github.com/khanhtc1202/boogeyman" rel="noopener noreferrer"&gt;github&lt;/a&gt; and binary executable file available &lt;a href="https://github.com/khanhtc1202/boogeyman#download" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All strategies are defined in &lt;code&gt;domain/ranker.go&lt;/code&gt;. For now, there're 3 strategies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Top: Return top result of each search engines.&lt;/li&gt;
&lt;li&gt;Cross Matching: Return matched results cross through multi search engines. (Appeared in 2 or more search engines)&lt;/li&gt;
&lt;li&gt;All (with limit 20): Return all urls from search engines.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Feel free to implement your owned search strategy or just add new collector for collecting results from your favorite search engine. &lt;/p&gt;

&lt;p&gt;The new collector must implement &lt;code&gt;Collector&lt;/code&gt; interface&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// file: adapter/persistent/service/collector.go&lt;/span&gt;
&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Collector&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;GetSearchEngineType&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SearchEngineType&lt;/span&gt;
    &lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keyword&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Keyword&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SearchEngine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below is the result of searching with &lt;code&gt;yasuhiro matsumoto&lt;/code&gt; keyword on Boogeyman under cross match strategy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkenc793m2iszskgdg082.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkenc793m2iszskgdg082.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have fun with Boogeyman :))&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>search</category>
      <category>cli</category>
      <category>go</category>
    </item>
  </channel>
</rss>
