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ď č. 1nejasný 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