2015-11-16 72 views
4

開頭,則會提高提升我使用Elasticsearch使用ngram過濾器自動完成搜索。如果以搜索關鍵字開頭,我需要提高結果。如果結果以單詞

我的查詢很簡單:

"query": { 
    "match": { 
     "query": "re", 
     "operator": "and" 
    } 
} 

這是我的結果:

  • 重新 staurants
  • Couture等重新觸摸
  • 重新 stauration RAPIDE

但我想他們是這樣的:

  • 重新 staurants
  • 重新 stauration RAPIDE
  • Couture等重新觸摸

我如何能搬動結果從關鍵字開始?

在情況下,它可以幫助,這是我的映射:

{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "partialAnalyzer": { 
        "type": "custom", 
        "tokenizer": "ngram_tokenizer", 
        "filter": ["asciifolding", "lowercase"] 
       }, 
       "searchAnalyzer": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": ["asciifolding", "lowercase"] 
       } 
      }, 

      "tokenizer": { 
       "ngram_tokenizer": { 
        "type": "edge_ngram", 
        "min_gram": "1", 
        "max_gram": "15", 
        "token_chars": [ "letter", "digit" ] 
       } 
      } 
     } 
    }, 

    "mappings": { 
     "place": { 
      "properties": { 
       "name": { 
        "type": "string", 
        "index_analyzer": "partialAnalyzer", 
        "search_analyzer": "searchAnalyzer", 
        "term_vector": "with_positions_offsets" 
       } 
      } 
     } 
    } 
} 

問候,

回答

5

這個怎麼樣的想法,不是100%肯定的,因爲它依賴於數據,我認爲:

  • 創建您的name領域的子場應與keyword分析儀進行分析(幾乎保持原樣)
  • 更改查詢是一個boolshould小號
  • 一個should是你現在
  • 其他shouldmatchphrase_prefix的子場查詢。

映射:

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "partialAnalyzer": { 
      "type": "custom", 
      "tokenizer": "ngram_tokenizer", 
      "filter": [ 
      "asciifolding", 
      "lowercase" 
      ] 
     }, 
     "searchAnalyzer": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "asciifolding", 
      "lowercase" 
      ] 
     }, 
     "keyword_lowercase": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": [ 
      "asciifolding", 
      "lowercase" 
      ] 
     } 
     }, 
     "tokenizer": { 
     "ngram_tokenizer": { 
      "type": "edge_ngram", 
      "min_gram": "1", 
      "max_gram": "15", 
      "token_chars": [ 
      "letter", 
      "digit" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "place": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "index_analyzer": "partialAnalyzer", 
      "search_analyzer": "searchAnalyzer", 
      "term_vector": "with_positions_offsets", 
      "fields": { 
      "as_is": { 
       "type": "string", 
       "analyzer": "keyword_lowercase" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

查詢:

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "name": { 
       "query": "re", 
       "operator": "and" 
      } 
      } 
     }, 
     { 
      "match": { 
      "name.as_is": { 
       "query": "re", 
       "type": "phrase_prefix" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+1

尼斯它的作品!謝謝 –

相關問題