2014-07-17 17 views
10

मैं अपने डेटाबेस को खोजने की कोशिश कर रहा हूं और ऊपरी/निचले केस फ़िल्टर शर्तों का उपयोग करने में सक्षम हूं लेकिन मैंने देखा है कि query के लागू विश्लेषक हैं, मैं यह नहीं समझ सकता कि लोअरकेस विश्लेषक कैसे लागू करें एक फ़िल्टर खोज पर।लोचदार खोज लोअरकेस फ़िल्टर खोज

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "bool": { 
        "should": [ 
         { 
          "term": { 
           "language": "mandarin" // Returns a doc 
          } 
         }, 
         { 
          "term": { 
           "language": "Italian" // Does NOT return a doc, but will if lowercased 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

मैं एक प्रकार languages है कि मैं का उपयोग कर लोवरकेस किया है::

"analyzer": { 
    "lower_keyword": { 
     "type": "custom", 
     "tokenizer": "keyword", 
     "filter": "lowercase" 
    } 
} 

और संबंधित मानचित्रण: यहाँ क्वेरी है

"mappings": { 
    "languages": { 
     "_id": { 
      "path": "languageID" 
     }, 
     "properties": { 
      "languageID": { 
       "type": "integer" 
      }, 
      "language": { 
       "type": "string", 
       "analyzer": "lower_keyword" 
      }, 
      "native": { 
       "type": "string", 
       "analyzer": "keyword" 
      }, 
      "meta": { 
       "type": "nested" 
      }, 
      "language_suggest": { 
       "type": "completion" 
      } 
     } 
    } 
} 

उत्तर

7

समस्या आप एक क्षेत्र है कि है कि आपने इंडेक्स के दौरान इसे कम करने के लिए विश्लेषण किया है, लेकिन आप क्वेरी के लिए एक टर्म फ़िल्टर का उपयोग कर रहे हैं जिसका विश्लेषण नहीं किया गया है:

टर्म फ़िल्टर

फिल्टर दस्तावेजों है कि क्षेत्रों है कि एक अवधि (विश्लेषण किया नहीं) होते हैं। शब्द क्वेरी के समान, सिवाय इसके कि यह फ़िल्टर के रूप में कार्य करता है।

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-filter.html

मैं बजाय एक प्रश्न फिल्टर का उपयोग कर की कोशिश करेंगे:

क्वेरी फ़िल्टर

Wraps किसी भी प्रश्न एक फिल्टर के रूप में इस्तेमाल किया जा करने के लिए। प्रश्नों के भीतर रखा जा सकता है जो फ़िल्टर स्वीकार करते हैं।

उदाहरण:

{ 
    "constantScore" : { 
     "filter" : { 
      "query" : { 
       "query_string" : { 
        "query" : "this AND that OR thus" 
       } 
      } 
     } 
    } } 

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-filter.html#query-dsl-query-filter

+1

तो अगर मैं अवधि यद्यपि चाहता था लोवरकेस में रखना मैं एक लोअरकेस एक के लिए tokenizer बदल सकते हैं और सब कुछ पुन: अनुक्रमणिका हैं? – Maruf

+0

नहीं, यह लोअरकेस फ़िल्टर के कारण इंडेक्सिंग के दौरान पहले ही कम हो चुका है। समस्या यह है कि आपको एक क्वेरी प्रकार का उपयोग करने की आवश्यकता है जो विश्लेषण भी करेगा - टर्म फ़िल्टर नहीं। –

+2

यदि आप अभी अपना इनपुट कम कर चुके हैं तो बेहतर प्रदर्शन देखेंगे ताकि आप क्वेरी फ़िल्टर का उपयोग कर टर्म फ़िल्टर का उपयोग जारी रख सकें? – odyth

संबंधित मुद्दे