Milvus hybridihaku

Milvus Hybridihaku



Milvuksessa hybridihaku on vektorihaku, joka sisältää attribuuttisuodatuksen. Käyttämällä tiettyjä Boolen lausekkeita joko skalaarikenttien tai ensisijaisen avainkentän suodattamiseen voit soveltaa tiettyjä ehtoja hakusi rajaamiseen.

Tämä opetusohjelma näyttää, kuinka suorittaa perushybridihaku Milvuksessa PyMilvus API:n avulla.

Vaatimukset:

Jos haluat käyttää tässä viestissä annettuja menetelmiä ja koodia, varmista, että sinulla on seuraavat asiat:







  1. Pääsy Milvus-palvelimelle
  2. Python 3.10+ ja uudemmat
  3. PyMilvus asennettu

Kun annetut vaatimukset täyttyvät, voimme jatkaa opetusohjelmaa.



Luo kokoelma

Ennen kuin sukeltaamme hybridihaun suorittamiseen Milvuksessa, aloitetaan perustamalla peruskokoelma esittelytarkoituksiin.



Voimme tehdä tämän asettamalla tarvittavat kokoelmaparametrit, kuten kenttäskeeman, kokoelmaskeeman ja kokoelman nimen.





Luomme ensisijaisen kokoelman elokuvatietojen tallentamiseen Milvus Python API:n avulla. Muista, että tämä on esittelytietoa eivätkä edusta todellista data- tai skeemakokoonpanoa.

alkaen pymilvus tuonti Kokoelmakaavio , FieldSchema , Tietotyyppi

elokuvan_tunnus = FieldSchema (

nimi = 'movie_id' ,

dtype = Tietotyyppi. INT64 ,

on_ensisijainen = Totta ,

)

elokuvan_nimi = FieldSchema (

nimi = 'elokuvan_nimi' ,

dtype = Tietotyyppi. VARCHAR ,

Maksimi pituus = 200 ,

)

elokuvaohjaaja = FieldSchema (

nimi = 'elokuvaohjaaja' ,

dtype = Tietotyyppi. VARCHAR ,

Maksimi pituus = 100 ,

)

elokuvan_julkaisuvuosi = FieldSchema (

nimi = 'elokuvan_julkaisuvuosi' ,

dtype = Tietotyyppi. INT64 ,

)

elokuva_genre = FieldSchema (

nimi = 'elokuvalaji' ,

dtype = Tietotyyppi. VARCHAR ,

Maksimi pituus = viisikymmentä ,

)

elokuvan_intro = FieldSchema (

nimi = 'film_intro' ,

dtype = Tietotyyppi. FLOAT_VECTOR ,

himmeä = 2

)

kaava = Kokoelmakaavio (

kentät = [ elokuvan_tunnus , elokuvan_nimi , elokuvaohjaaja , elokuvan_julkaisuvuosi , elokuva_genre , elokuvan_intro ] ,

kuvaus = 'Elokuvahaku' ,

enable_dynamic_field = Totta

)

kokoelman_nimi = 'elokuva'

Edellisessä esimerkissä käytetään PyMilvus SDK:ta peruskokoelmakaavion määrittämiseen määritetyillä parametreilla. Tämä sisältää kenttiä, kuten 'film_id', 'film_title', 'film_release_year' jne.



Kun olemme valmis, voimme luoda kokoelman käyttämällä edellistä skeemaa. Koodi on seuraava:

alkaen pymilvus tuonti Kokoelma

kokoelma = Kokoelma (

nimi = kokoelman_nimi ,

kaava = kaava ,

käyttämällä = 'oletus' ,

shards_num = 2

)

Luomisen yhteydessä voimme käyttää collection.insert()-menetelmää näytetietojen lisäämiseen kokoelmaan seuraavan määritelmän mukaisesti:

elokuvan_päivämäärä = [

{

'movie_id' : 1 ,

'elokuvan_nimi' : 'Alku' ,

'elokuvaohjaaja' : 'Christopher Nolan' ,

'elokuvan_julkaisuvuosi' : 2010 ,

'elokuvalaji' : 'Tieteiskirjallisuus' ,

'film_intro' : [ 0.1 , 0.5 ] , # Esimerkki floatvektorista

} ,

{

'movie_id' : 2 ,

'elokuvan_nimi' : 'Shawshankin lunastus' ,

'elokuvaohjaaja' : 'Frank Darabont' ,

'elokuvan_julkaisuvuosi' : 1994 ,

'elokuvalaji' : 'Draama' ,

'film_intro' : [ 0.2 , 0.7 ] , # Esimerkki floatvektorista

} ,

]

Lisää tiedot muodostamalla yhteys Milvus-palvelimeen ja kutsumalla insert()-metodia seuraavasti:

kokoelma = Kokoelma ( 'elokuva' )
Herra = kokoelma. lisää ( elokuvan_päivämäärä )

Tämän pitäisi lisätä 'film_data', joka on aiemmin määritetty elokuvakokoelmaan.

Lataa kokoelma

Ennen kuin etsimme kokoelmaan tallennettuja tietoja, meidän on ladattava kokoelma järjestelmälevyltä järjestelmän muistiin. Voit katsoa Milvus Load Collection -oppaamme saadaksesi lisätietoja.

Toistaiseksi käytämme PyMilvus SDK:ta elokuvakokoelman lataamiseen järjestelmän muistiin seuraavasti:

alkaen pymilvus tuonti Kokoelma

kokoelma = Kokoelma ( 'elokuva' )

kokoelma. ladata ( )

Tämän pitäisi tuoda kokoelma saataville, jonka avulla voimme suorittaa kohdehakuja palvelimella, kuten seuraavissa vaiheissa esittelemme.

Milvus hybridihaku

Lopuksi voimme suorittaa hybridihaun. Aloitetaan määrittelemällä, mikä Milvus-hybridihaku tarkalleen ottaen on.

Milvuksessa hybridihaku on hakutekniikka, joka yhdistää vektorihaun attribuuttisuodatukseen. Tämä lähestymistapa mahdollistaa haun vektorien samankaltaisuuksien ja tiettyjen attribuuttiehtojen perusteella.

Käyttämällä Boolen lausekkeita suodattamaan skalaarikentät tai ensisijainen avainkenttä, voimme rajoittaa haun täyttämään määritetyt ehdot.

Tästä syystä käyttämällä hybridihakua Milvuksessa esittelemme monipuolisuuden ja tarkkuuden hyödyntämällä vektoriesitystä ja attribuuttipohjaista suodatusta yhdessä kyselyssä.

HUOMAUTUS: Milvus voi vaatia meitä luomaan indeksin kokoelmalle kenttiin, joista haluamme etsiä. Esimerkissämme voimme luoda indeksin 'film_intro' -kenttään seuraavasti:

pymilvuksesta tuonti Kokoelma

kokoelma = Kokoelma ( 'elokuva' )

index_params = {
'indeksin_tyyppi' : 'IVF_FLAT' ,
'metriikkatyyppi' : 'L2' ,
'paramet' : {
'nart' : 2
}
}

kokoelma. luo_indeksi (
kenttä nimi = 'film_intro' ,
index_params = index_params ,
indeksin_nimi = 'intro_index'
)

Luodaksemme indeksin myös 'julkaisuvuosille' voimme suorittaa koodin seuraavasti:

alkaen pymilvus tuonti Kokoelma
kokoelma = Kokoelma ( 'elokuva' )
kokoelma. luo_indeksi (
kenttä nimi = 'elokuvan_julkaisuvuosi' ,

indeksin_nimi = 'year_index'
)

Milvus Hybrid Search -esimerkki:

Osoitetaan, kuinka voimme suorittaa vektorihybridihaun määrittämällä Boolen lausekkeen suodattamaan entiteettien skalaarikentän.

Harkitse seuraavaa esimerkkiä:

search_param = {
'data' : [ [ 0.1 , 0.2 ] ] ,
'anns_field' : 'film_intro' ,
'param' : { 'metriikkatyyppi' : 'L2' , 'paramet' : { 'nkoe' : 10 } , 'offset' : 0 } ,
'raja' : 10 ,
'lause' : 'elokuvan_julkaisuvuosi <= 2000' ,
}
res = kokoelma. Hae ( **search_param )
Tulosta ( res )

Tässä tapauksessa suoritamme hybridihaun määrittämällä Boolen lausekkeen, joka vastaa arvoa, jossa 'film_release_year' on pienempi tai yhtä suuri kuin 2000.

Kun suoritamme edellisen koodin, meidän pitäisi saada tulos seuraavasti:

[ '['id: 2, distance: 0.25999999046325684, entity: {}']' ]

Tässä tapauksessa vastaavan arvon ID on 2, joka on määritelty toisessa entiteetissä ja etäisyydellä.

Täysi lähdekoodi:

Seuraavassa näkyy tässä viestissä käytetty täydellinen lähdekoodi, mukaan lukien skeeman luominen, tietojen lisääminen ja hybridihaku.

alkaen pymilvus tuonti Kokoelmakaavio , FieldSchema , Tietotyyppi , Kokoelma , yhteyksiä

yhteyksiä. kytkeä (

alias = 'oletus' ,

isäntä = 'paikallinen isäntä' ,

portti = '19530'

)

elokuvan_tunnus = FieldSchema (

nimi = 'movie_id' ,

dtype = Tietotyyppi. INT64 ,

on_ensisijainen = Totta ,

)

elokuvan_nimi = FieldSchema (

nimi = 'elokuvan_nimi' ,

dtype = Tietotyyppi. VARCHAR ,

Maksimi pituus = 200 ,

)

elokuvaohjaaja = FieldSchema (

nimi = 'elokuvaohjaaja' ,

dtype = Tietotyyppi. VARCHAR ,

Maksimi pituus = 100 ,

)

elokuvan_julkaisuvuosi = FieldSchema (

nimi = 'elokuvan_julkaisuvuosi' ,

dtype = Tietotyyppi. INT64 ,

)

elokuva_genre = FieldSchema (

nimi = 'elokuvalaji' ,

dtype = Tietotyyppi. VARCHAR ,

Maksimi pituus = viisikymmentä ,

)

elokuvan_intro = FieldSchema (

nimi = 'film_intro' ,

dtype = Tietotyyppi. FLOAT_VECTOR ,

himmeä = 2

)

kaava = Kokoelmakaavio (

kentät = [ elokuvan_tunnus , elokuvan_nimi , elokuvaohjaaja , elokuvan_julkaisuvuosi , elokuva_genre , elokuvan_intro ] ,

kuvaus = 'Elokuvahaku' ,

enable_dynamic_field = Totta

)

kokoelman_nimi = 'elokuva'

kokoelma = Kokoelma (

nimi = kokoelman_nimi ,

kaava = kaava ,

käyttämällä = 'oletus' ,

shards_num = 2

)

elokuvan_päivämäärä = [

{

'movie_id' : 1 ,

'elokuvan_nimi' : 'Alku' ,

'elokuvaohjaaja' : 'Christopher Nolan' ,

'elokuvan_julkaisuvuosi' : 2010 ,

'elokuvalaji' : 'Tieteiskirjallisuus' ,

'film_intro' : [ 0.1 , 0.5 ] , # Esimerkki floatvektorista

} ,

{

'movie_id' : 2 ,

'elokuvan_nimi' : 'Shawshankin lunastus' ,

'elokuvaohjaaja' : 'Frank Darabont' ,

'elokuvan_julkaisuvuosi' : 1994 ,

'elokuvalaji' : 'Draama' ,

'film_intro' : [ 0.2 , 0.7 ] , # Esimerkki floatvektorista

} ,

]

kokoelma = Kokoelma ( 'elokuva' )

Herra = kokoelma. lisää ( elokuvan_päivämäärä )

kokoelma = Kokoelma ( 'elokuva' )

kokoelma. ladata ( )

search_param = {

'data' : [ [ 0.1 , 0.2 ] ] ,

'anns_field' : 'film_intro' ,

'param' : { 'metriikkatyyppi' : 'L2' , 'paramet' : { 'nkoe' : 10 } , 'offset' : 0 } ,

'raja' : 10 ,

'lause' : 'elokuvan_julkaisuvuosi <= 2000' ,

}

res = kokoelma. Hae ( **search_param )

Tulosta ( res )

Johtopäätös

Tutustuimme Milvuksen toimintaan tutustumalla hybridihakuun. Esitimme myös käytännön esimerkein, kuinka luodaan skeemoja, lisätään tietoja ja määritellään Boolen lausekkeet tietyssä entiteettikentässä hybridihaun suorittamiseksi halutulla tavalla.