2016-07-13 10 views
0

私はすでに答えが見つかっていますが、何も問題がないので、文字列型のフィールド "name"を持つインデックスがあります。 match_phraseでフルテキスト検索を行うが、そのフィールドは、カンマ、ポイント、スラッシュまたはハイフンで区切られた文字列の複合語である場合があります(例: "engineer、operator、maintenance")。elasticsearchの特殊文字を含む結果を除外します

  1. 「エンジニア、オペレータ、メンテナンス」
  2. 「エンジニア」
  3. 「産業エンジニア

私が検索した場合:私は、私は次の名前を持っている場合例えば、それらの結果を除外する必要があります「エンジニアは」、私は最後の二つの結果を取得し、最初のエクスクルードしたい私はこのようなはならない句で試してみました:。

"query": { 
    "bool": { 
    "must": { 
     "match_phrase": { 
     "name": "Vendedor" 
     } 
    }, 
    "must_not":{ 
     "match":{ 
     "name": "\." 
     } 
    } 
    } 
} 

私も、正規表現を試みたが、それは常に私に間違った文字を使用した結果を得る:

"must_not":{ 
     "regexp":{ 
     "name": ".*[\-\.\/\.].*" 
     } 
    } 

は何を私が間違っているのか、このタスクをacomplishする方法がどうあるべきかを?

答えて

1

インデックスの設定では、そのようなchar型のフィルタとパターンを追加することができますが、その後、あなたは、https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-analyzer.html

   "char_filter": { 
        "pattern": { 
        "pattern": "\\W+", 
        "type": "pattern_replace", 
        "replacement": " " 
        }, 
        "html": { 
        "type": "html_strip" 
        } 
       } 
+0

こんにちは、私は間違っを交換する必要はありません詳細はこちらをご覧ください、インデックスを再作成する必要があります私が必要とするのは、それらの文字を含む結果を除外することです。私は例を使って答えを編集する – ingemi

+0

こんにちは、文字列フィールドは、ElasticSearchでデフォルトで分析されます。マッピングでnot_analyzedに設定してみましたか? https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_filter_with_text – Luca

関連する問題