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

Java Lucene上的模拟弹性搜索索引和查询

应瀚
2023-03-14

我将向你展示我的弹性配置,以及我是如何在Lucene上复制它的。

这是我创建索引的弹性搜索连接器:

"analysis": {
   "analyzer": {
            "default": {           
               "tokenizer": "standard",           
                "filter":  [ "lowercase", "asciifolding" ]
             }
    }     
}

以下是我的疑问:

 "query": {
      "dis_max": {
           "queries": [
                { "match": { "field1": "${term}" }}
           ],
      "tie_breaker": 1
     }
 }
 "query": {
      "dis_max": {
           "queries": [
                { "match": { "field1": "${term}" }},
                { "match": { "field2": "${term}" }},
                { "match": { "field2":  "${term}" }}
           ],
           "tie_breaker": 1
      }
 }
 val CustomStringFieldType: FieldType = {
     val fieldType = new FieldType()
     fieldType.setStoreTermVectors(true)
     fieldType.setStoreTermVectorPositions(true)
     fieldType.setOmitNorms(false)
     fieldType.setTokenized(true)
     fieldType.setStored(false)
     fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS)
     fieldType.freeze()
     fieldType
   }
  def query1(tokens: Seq[String]): Query = {

     var booleanQueryBuilder = new BooleanQuery.Builder()

     for (token <- tokens) {
       booleanQueryBuilder = booleanQueryBuilder.add(
         new TermQuery(new Term("field1", token)),
         BooleanClause.Occur.SHOULD)
     }
     booleanQueryBuilder.build()
   }

 def query2(tokens: Seq[String]): Query = {

     val queries = new java.util.ArrayList[Query]()

     for (field <- ("field1", "field2", "field3") {

       var booleanQueryBuilder = new BooleanQuery.Builder()

       for (token <- tokens) {
         booleanQueryBuilder = booleanQueryBuilder.add(
           new TermQuery(new Term(field, token)),
           BooleanClause.Occur.SHOULD)
       }

       val booleanQuery: BooleanQuery = booleanQueryBuilder.build()
       queries.add(booleanQuery)
     }
     new DisjunctionMaxQuery(queries, broadQueryTieBreaker)
   }

共有1个答案

东门晟
2023-03-14

明显的区别在于您的映射设置。

当您在Lucene中选择具有以下内容时

fieldType.setStoreTermVectors(true)
fieldType.setStoreTermVectorPositions(true)
fieldType.setOmitNorms(false)
fieldType.setTokenized(true)
fieldType.setStored(false)
fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS)

默认情况下,在ElasticSearch中:

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "text": {
          "type":        "text",
          "term_vector": "with_positions"
        }
      }
    }
  }
}
 类似资料:
  • 我刚加入弹性搜索公司。而不知道如何在JSON请求中对索引和an类型发出正确的请求?(所以我不想像localhost:9200/myindex/mytype/_search那样在URL中使用索引和类型,而是向localhost:9200/_search发出JSON请求) 我试过这样的东西。但我得到的结果是'AAA'索引而不是'BBB'索引。如何只从bbb索引得到结果或者根本没有结果?

  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢

  • 我是弹性搜索新手,并且已经完成了类似mykong教程的基本教程 我对创建任何文档的一部分有疑问 创建操作示例插入包含 /mkyong/posts/1001和以下请求数据的新文档: 问题1:-ES是否会在上述文档的所有属性上创建反向索引,即默认情况下的标题/类别/已发布/作者,并提供全文搜索,还是需要明确提及? 问题2:-在上述示例中,我们已经有了唯一的\u id,即。如果我已经将其存储在DB中并生

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 我正在LDAP服务器上工作。它有弹性搜索。我必须用一些Javascript代码(JSON格式)发送查询。 这是我的查询: 我试图打印所有结果,其中“server”=“server\u name”(该字段是server:server\u name…)。我认为关于弹性搜索的文档太小了。我找到了一些文档,但都是一样的,对新用户没有帮助。这个例子太简单了。 此查询返回所有结果,包括任何筛选器。 Ps:这就

  • 如何获得空数组和美国的结果和