深入理解搜索-精确匹配搜索

2019-03-28 00:28|来源: lucene菜鸟

查出在某个域中,含有某个词的指定文档数,要用到的方法是TermQuery

public void searchByTerm(String field,String name,int num) {

   try {

      IndexSearcher searcher = getSearcher();

      Query query = new TermQuery(new Term(field,name));

      TopDocs tds = searcher.search(query,  num);

      System.out.println("一共查询了:"+tds.totalHits);

      for(ScoreDoc sd:tds.scoreDocs) {

          Document doc = searcher.doc(sd.doc);

          System.out.println(doc.get("id")+"---->"+

                 doc.get("name")+"["+doc.get("email")+

                 "]-->"+doc.get("id")+","+

                 doc.get("attach")+","+doc.get("date"));

      }

      searcher.close();

   } catch (CorruptIndexException e) {

      e.printStackTrace();

   } catch (IOException e) {

      e.printStackTrace();

   }

}

@Test

public void searchByTerm() {

   su.searchByTerm("content","football",3);

}

本文链接:深入理解搜索-精确匹配搜索,转载请注明出处:http://www.javadx.com/article/785

相关问答

更多
  • 下载地址: http://www.embeded.cn/Upfiles/005/005/2005_9_14/2005914152848.pdf 原始页面: http://www.embeded.cn/down_list/005005/3562.htm
  • http://www.icili.com/emule/download/2950192
  • 你想使用\b作为单词边界,正如@ gromi08所说: \bbauvol\b 如果你想复制这个单词的任何部分(所以你可以替换它,修改它,更改大小写等),通常最好将它包装在(和)大括号中,以便你可以在替换框中引用它们: Find: (\bbauvol\b) Replace: \1 一旦找到了结果,你有没有具体的搜索结果(剪切,复制等)? You want to use \b as word boundaries, as @gromi08 said: \b ...
  • 如果您只想将“类型”子句强制使用,则可以将OR保留为默认运算符,并在“type”子句前面使用编码的“+”号: ./select/?q=location:N1 %2Btype:blue&rows=100&fl=*,score&debugQuery=true If you only want to have the "type" clause to be mandatory, you can keep the OR as the default operator and use the encoded '+' ...
  • 目前,您将所有列连接到一个字符串,然后在此连接字符串中的任何位置搜索搜索字符串的出现。 您可能真正想要的是将每列完全匹配您的搜索字符串并返回每一行,它在任何列中都具有完全匹配。 要完全匹配,请不要使用LIKE 。 简单=就是你想要的。 要组合它们,只需使用OR运算符即可。 $query = "SELECT * FROM tbstats WHERE date = '" . $valueToSearch . "' OR mode = '" . $valueToSearch . "' OR ...
  • 好的,我需要为我要提供的解决方案做一件事。 在数据左侧插入一列,或将所有内容向右移动一列。 在空白单元格A4键入=C4&D4&E4&F4&G4&H4&I4&J4&K4&L4&M4&N4然后向下复制到示例中的单元格A5 。 在A11做同样的事情ie =C11&D11&...在单元格B11写下面的函数=vlookup(A11 , $A$4:$B$5 , 2, 0 ) 你应该注意一件事。 如果搜索区域中的Y和N字符串匹配的作业超过1个,则会返回找到的第一个作业。 Ok there is one thing you ...
  • 对于完全匹配,您需要匹配单词边界( \b ): if ($Content -match "\b$Search1\b" -and $Content -match "\b$Search2\b") { ... } 有些字符(所谓的元字符)在正则表达式中具有特殊含义,例如\ , ^或方括号。 如果您希望将搜索字词中的所有内容视为文字字符,则应在条件中使用它们之前考虑转义这些字词: $Search1 = [regex]::Escape($Search1) $Search2 = [regex]::Escape($ ...
  • 根据文件 : not_analyzed: 索引此字段,因此可以搜索,但完全按照指定索引值。 不要分析它。 设置model: not_analyzed在映射中: { "model": { "type": "string", "index": "not_analyzed" } } 然后用term查询。 According to the docs: not_analyzed: Index this field, so it is searchable, but index ...
  • 你有一些选择。 直接翻译您的要求会得到: G(?!O) ,您可以用空字符串替换它。 这可以这样做: line = re.sub(r"G(?!O)", "", line) 仅当以下字符不是O , G匹配G , (?!O)匹配。 您可能希望使用G(?=\d)来匹配G s后跟一个数字。 You have some alternatives here. Translating your requirements directly gets you: G(?!O), which you can replace wi ...
  • 我最终没有使用模糊匹配来解决我的问题,而是使用了ngram的。 /** * Map - Create a new index with property mapping */ public function map() { $params['index'] = self::INDEX; $params['body']['settings'] = array( 'index' => array( 'analysis' => array( ...