0

Elasticsearch のファセット機能を使用して、単語とフレーズのタグクラウドを作成しようとしています。

私のマッピング:

curl -XPOST http://localhost:9200/myIndex/ -d '{

  ...

  "analysis":{  
    "filter":{ 
      "myCustomShingle":{
        "type":"shingle",
        "max_shingle_size":3,
        "output_unigrams":true
      }
    },
    "analyzer":{ //making a custom analyzer
      "myAnalyzer":{
        "type":"custom",
        "tokenizer":"standard",
        "filter":[
          "lowercase",
          "myCustomShingle",
          "stop"
        ]
      } 
    }
  }

  ...
},
"mappings":{

   ...


   "description":{ //the field to be analyzed for making the tag cloud
     "type":"string",
     "analyzer":"myAnalyzer",
     "null_value" : "null"
   },


   ...



}

ファセットを生成するためのクエリ:

curl -X POST "http://localhost:9200/myIndex/myType/_search?&pretty=true" -d '
{
  "size":"0",

  "query": {
    match_all:{}
  },


  "facets": {
    "blah": {
      "terms": {
        "fields" :     ["description"],
        "exclude" : [ 'evil' ], //remove facets that contain these words
        "size": "50"
      }
    }
  }
}

私の問題は、「ファセット」の「除外」オプションに「悪」という単語を挿入すると、「悪」に一致する単語(またはシングルシングル)を含むファセットが正常に削除されることです。しかし、2/3 の単語帯状疱疹、「バイオハザード」、「邪悪なコンピューター」、「私の邪悪な猫」は削除されません。「除外単語」を含むフレーズのファセットを削除するにはどうすればよいですか?

4

1 に答える 1

0

あなたが達成したいことは完全には明らかではありません。通常、分析されたフィールドにファセットを作成することはありません。より良い方法であなたが望むものを達成するのを助けることができるように、帯状疱疹を作っている理由を説明できるかもしれません.

exclude facet パラメータを使用すると、特定のエントリを除外できますが、 とは異なりevilますresident evil。除外する場合は、指定する必要があります。ファセットは索引付けされた用語に基づいて作成されresident evil、実際には索引内の単一の用語であり、用語とは異なりevilます。

インデックス作成とファセット化に関して既に行った選択を考えると、目的を達成する方法があります。Elasticsearch には非常に強力なスクリプト モジュールがあります。次のように、スクリプトを使用して、各エントリをファセットに含めるかどうかを決定できます。

{
  "query": {
    "match_all" : {}
  },
  "facets": {
    "tags": {
      "terms": {
        "field" : "tags",
        "script" : "term.contains('evil') ? true : false"
      }
    }
  }
}
于 2012-10-08T10:25:50.473 に答える