/ / Nežiaduce stopky v pružnom vyhľadávaní

Nevyžiadané heslá v elastickom vyhľadávaní - elasticsearch

Používam Elastic Search 6.Toto je otázka

PUT /semtesttest
{
"settings": {
"index" : {
"analysis" : {
"filter": {
"my_stop": {
"type": "stop",
"stopwords_path": "analysis1/stopwords.csv"
},
"synonym" : {
"type" : "synonym",
"synonyms_path" : "analysis1/synonym.txt"
}
},
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "standard",
"filter" : ["synonym","my_stop"]
}
}
}
}
},
"mappings": {
"all_questions": {
"dynamic": "strict",
"properties": {
"kbaid":{
"type": "integer"
},
"answer":{
"type": "text"
},
"question":    {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}

PUT /semtesttest/all_questions/1
{
"question":"this is hippie"
}

GET /semtesttest/all_questions/_search
{
"query":{
"fuzzy":{"question":{"value":"hippie","fuzziness":2}}
}
}

GET /semtesttest/all_questions/_search
{
"query":{
"fuzzy":{"question":{"value":"this is","fuzziness":2}}
}
}

v synonym.txt to je

this, that, money => sainai

v stopwords.csv to je

hello
how
are
you

Prvý návrat („hippie“) je prázdny výsledky vrátia iba druhý výsledok („toto je“)

aký je problém? Vyzerá to, že slovo zastavenie „je toto“ je filtrované v prvom dotaze, ale svoje slová zastavenia som explicitne určil?

odpovede:

0 pre odpoveď č. 1

nejasný je termín dotazu. Vstup nebude analyzovať, takže hľadaný výraz hľadal presný termín this is (použitie určitej fuzzy zábavy).

Takže z týchto dvoch výrazov chcete buď vytvoriť dotaz, alebo použiť znak a fulltextový dotaz miesto. Ak je dôležitá múdrosť, myslím, že jediným úplným textovým dotazom je zápas:

GET /semtesttest/all_questions/_search?pretty
{
"query":{
"match":{"question":{"query":"this is","fuzziness":2}}
}
}

Ak sú dôležité frázy, môžete sa na to pozrieť odpoveď a pracovať s nimi rozpätie dotazov.

Môže vám to tiež pomôcť, aby ste videli, ako sa váš analyzátor používa:

GET /semtesttest/_analyze?analyzer=my_analyzer&field=question&text=this is