Bu işlem için multi-fields kullanabilir ve analyzed
alanı içinde bir not_analyzed
alt alan olabilir (en bu örnekte item
diyelim).
haritalama ile bu tür
{
"yourtype": {
"properties": {
"item": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
, değerler Hamburgers
ve Hamburger Buns
her Birden çok alanda item
ve item.raw
göre analizör tarafından "inceledi" olduğunu kontrol edebilirsiniz: Sizin haritalama şuna benzer olurdu Hamburger
için
:
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item&pretty' -d 'Hamburger'
{
"tokens" : [ {
"token" : "hamburger",
"start_offset" : 0,
"end_offset" : 10,
"type" : "<ALPHANUM>",
"position" : 1
} ]
}
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item.raw&pretty' -d 'Hamburger'
{
"tokens" : [ {
"token" : "Hamburger",
"start_offset" : 0,
"end_offset" : 10,
"type" : "word",
"position" : 1
} ]
}
Hamburger Buns
için:
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item&pretty' -d 'Hamburger Buns'
{
"tokens" : [ {
"token" : "hamburger",
"start_offset" : 0,
"end_offset" : 10,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "buns",
"start_offset" : 11,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 2
} ]
}
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item.raw&pretty' -d 'Hamburger Buns'
{
"tokens" : [ {
"token" : "Hamburger Buns",
"start_offset" : 0,
"end_offset" : 15,
"type" : "word",
"position" : 1
} ]
}
Gördüğünüz gibi, not_analyzed
alanı, tam olarak girildiği gibi el değmemiş olarak endekslenecek. Şimdi
, hadi endeks iki örnek belgeler bu göstermek için: nihayet
curl -XPOST localhost:9200/yourtypes/_bulk -d '
{"index": {"_type": "yourtype", "_id": 1}}
{"item": "Hamburger"}
{"index": {"_type": "yourtype", "_id": 2}}
{"item": "Hamburger Buns"}
'
Ve sorunuzun cevabı, sen Hamburger
üzerinde tam bir eşleşme yapmak istiyorsanız, size alt alanda item.raw
içinde arama yapabilirsiniz
curl -XPOST localhost:9200/yourtypes/yourtype/_search -d '{
"query": {
"term": {
"item.raw": "Hamburger"
}
}
}'
Ve alırsınız: böyle (açılan dava da maç için vardır unutmayın)
{
...
"hits" : {
"total" : 1,
"max_score" : 0.30685282,
"hits" : [ {
"_index" : "yourtypes",
"_type" : "yourtype",
"_id" : "1",
"_score" : 0.30685282,
"_source":{"item": "Hamburger"}
} ]
}
}
GÜNCELLEME (yorumlar/aşağıda tartışma ve soru yeniden düzenleme bakınız)
yorumlardan seni örnek alarak ve HaMbUrGeR BuNs
maçı Hamburger buns
sadece böyle bir match
sorgusu ile elde edebiliriz yaşamak istiyor. Yukarıdaki Sen beklediğiniz olarak analizörü tutabilir
{
...
"hits" : {
"total" : 1,
"max_score" : 0.2712221,
"hits" : [ {
"_index" : "yourtypes",
"_type" : "yourtype",
"_id" : "2",
"_score" : 0.2712221,
"_source":{"item": "Hamburger Buns"}
} ]
}
}
Zonaların amacı nedir? – abroekhof
Ayrıca, Porter ve Kartopu stemmer kullanmanın bir nedeni var mı? – abroekhof
Nedeni yok. Bu, benim sadece bazı gerçek kodları göstermek için hızla değiştirdiğim ve değiştirebileceğim bir örnek. Önemli parçalar 'shingle' filtresi,' token_count' tipi alan ve sorgulamanın kendisidir. Filtrelerin geri kalanı sadece örnek: bunlar dışarı alınabilir, diğer şeyler eklenebilir. –