第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

ElasticSearch 通過數(shù)組字段搜索作為獨(dú)占搜索

ElasticSearch 通過數(shù)組字段搜索作為獨(dú)占搜索

qq_笑_17 2023-03-09 14:02:47
我在 ElasticSearch 的字段中確實(shí)有一個(gè)關(guān)鍵字類型的數(shù)據(jù)數(shù)組。我想用我想搜索的獨(dú)占值搜索這個(gè)數(shù)組,即排除不包含在我的搜索關(guān)鍵字中的數(shù)組值。請(qǐng)參閱下面的詳細(xì)信息。謝謝!我有以下彈性搜索索引映射:"exgroups": {  "type": "keyword",  "eager_global_ordinals": true},使用以下示例數(shù)據(jù):"id": 1,"exgroups": ["TSX"]"id": 2,"exgroups": ["TSX", "OTC", "NSD"]我的搜索是這樣的:{  "bool" : {    "filter" : {        "term" : {          "exgroups" : {            "value" : "TSX"          }        }    }  }}我用過 MatchQueryBuilder、TermQueryBuilder、TermsQueryBuilder 都無濟(jì)于事。根據(jù) ElasticSearch TermQuery 的定義,它應(yīng)該可以解決問題。https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-term-query.html。但它沒有,可能是因?yàn)樵撟侄问且粋€(gè)數(shù)組。通常,Term*Query 的行為如下:iterate all the documents, for each document  check if the exgroups contains 'tsx'  if it does, return the document這將返回文檔 1 和 2,因?yàn)槲臋n 2 也包含 TSX。但是,我希望它只返回文檔 1,而不返回?cái)?shù)組中的其他文檔。我該如何做到這一點(diǎn)?
查看完整描述

1 回答

?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

重新索引解決方案:

我最近從 ElasticSearch 找到了這個(gè)文檔: https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html

由于倒排索引,TermQuery 和 TermsQuery 或 ElasticSearch 通常都使用“必須包含”而不是“必須等于”。

根據(jù)他們的說法,最好的解決方案是:

如果您確實(shí)想要這種行為——整個(gè)字段相等——實(shí)現(xiàn)它的最好方法是索引一個(gè)輔助字段。在此字段中,您索引字段包含的值的數(shù)量。使用我們之前的兩個(gè)文檔。將計(jì)數(shù)信息編入索引后,您可以構(gòu)建一個(gè) constant_score 來強(qiáng)制執(zhí)行適當(dāng)數(shù)量的術(shù)語。https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html#_equals_exactly

步驟如下:

  1. 在名為 exgroups_count 的索引中添加額外的映射。

  2. 使用 logstash 計(jì)算 exgroups 數(shù)組長(zhǎng)度并放入 exgroups_count 字段。

  3. 保存索引。

沒有重新索引的另一個(gè)解決方案:

添加和重新索引整個(gè)事物有一些限制。一旦您的索引增長(zhǎng),向索引添加字段和計(jì)算計(jì)數(shù)將是非常具有侵入性的 - 使其操作非常密集 - 更不用說您必須保存和維護(hù)您的映射。

我找到了一個(gè)不需要重新索引的解決方案。查看 ScriptQueryBuilder,理論上我可以添加一個(gè)腳本過濾器來計(jì)算數(shù)組的長(zhǎng)度并等于 1。

"filter" : {

    "script" : {

        "script" : "doc['exgroups'].values.length == 1"

    }

}

所以完整的查詢現(xiàn)在變成這樣:


"bool" : {

  "must" : [

    {

      "term" : {

        "exgroups" : {

          "value" : "TSX",

          "boost" : 1.0

        }

      }

    }

  ],

  "filter" : [

    {

      "script" : {

        "script" : {

          "source" : "doc['exgroups'].values.length == 1",

          "lang" : "painless"

        },

        "boost" : 1.0

      }

    }

  ],

  "adjust_pure_negative" : true,

  "boost" : 1.0

}

在爪哇,


BoolQueryBuilder qBool = new BoolQueryBuilder();

TermQueryBuilder query = new TermQueryBuilder("exgroups", exchangeGroup.getCode());


qBool.must(query);


ScriptQueryBuilder sQuery = new ScriptQueryBuilder(new Script("doc['exgroups'].values.length == 1"));


qBool.filter(sQuery);


查看完整回答
反對(duì) 回復(fù) 2023-03-09
  • 1 回答
  • 0 關(guān)注
  • 243 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)