2013-09-24 21 views
12

私は弾性検索でインデックスされた文書のwebsiteフィールドを持っています。値の例:http://example.com問題は、私がexampleを検索すると、その文書が含まれていないということです。どのようにWebサイト/ URLフィールドを正しくマップするのですか? - httpexample.com弾性検索のインデックス作成ウェブサイト/ URL

{ 
    "settings":{ 
    "index":{ 
     "analysis":{ 
     "analyzer":{ 
      "analyzer_html":{ 
        "type":"custom", 
        "tokenizer": "standard", 
       "filter":"standard", 
       "char_filter": "html_strip" 
      } 
     } 
     } 
    } 
    }, 
    "mapping":{ 
    "blogshops": { 
     "properties": { 
      "category": { 
       "properties": { 
        "name": { 
         "type": "string" 
        } 
       } 
      }, 
      "reviews": { 
       "properties": { 
        "user": { 
         "properties": { 
          "_id": { 
           "type": "string" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
    } 
} 

答えて

22

私はあなたが2つのトークンにhttp://example.domを分割standardアナライザを使用していると思います:

は、私は以下のインデックスを作成しました。あなたは見てみることができます http://localhost:9200/_analyze?text=http://example.com&analyzer=standard

urlを分割する場合は、別のanalyzerを使用するか、独自のcustom analyzerを指定する必要があります。

urlsimple analyzer - http://localhost:9200/_analyze?text=http://example.com&analyzer=simpleとなります。ご覧のとおり、は3つのトークン['http', 'example', 'com']として索引付けされています。 ['http', 'www']などのようなトークンを索引化しない場合は、lowercase tokenizer(これは単純なアナライザで使用されるもの)とstop filterでアナライザを指定できます。例えば、このような何か:

# Delete index 
# 
curl -s -XDELETE 'http://localhost:9200/url-test/' ; echo 

# Create index with mapping and custom index 
# 
curl -s -XPUT 'http://localhost:9200/url-test/' -d '{ 
    "mappings": { 
    "document": { 
     "properties": { 
     "content": { 
      "type": "string", 
      "analyzer" : "lowercase_with_stopwords" 
     } 
     } 
    } 
    }, 
    "settings" : { 
    "index" : { 
     "number_of_shards" : 1, 
     "number_of_replicas" : 0 
    }, 
    "analysis": { 
     "filter" : { 
     "stopwords_filter" : { 
      "type" : "stop", 
      "stopwords" : ["http", "https", "ftp", "www"] 
     } 
     }, 
     "analyzer": { 
     "lowercase_with_stopwords": { 
      "type": "custom", 
      "tokenizer": "lowercase", 
      "filter": [ "stopwords_filter" ] 
     } 
     } 
    } 
    } 
}' ; echo 

curl -s -XGET 'http://localhost:9200/url-test/_analyze?text=http://example.com&analyzer=lowercase_with_stopwords&pretty' 

# Index document 
# 
curl -s -XPUT 'http://localhost:9200/url-test/document/1?pretty=true' -d '{ 
    "content" : "Small content with URL http://example.com." 
}' 

# Refresh index 
# 
curl -s -XPOST 'http://localhost:9200/url-test/_refresh' 

# Try to search document 
# 
curl -s -XGET 'http://localhost:9200/url-test/_search?pretty' -d '{ 
    "query" : { 
    "query_string" : { 
     "query" : "content:example" 
    } 
    } 
}' 

メモ:ストップワード、ここで使用することを好まない場合は、興味深い記事がstop stopping stop words: a look at common terms query

+0

感謝@vhyzaです。インデックスの作成方法に関する質問を更新しました。私は入れ子になったプロパティを持ち、htmlを取り除きたい。 –

+0

ようこそ。ネストされたプロパティは問題ありません。必要に応じて、 'lowercase_with_stopwords'に 'char_filter'を追加してhtmlを取り除くことができます。 – vhyza

関連する問題