From f833c3d1291af0c1ac70b67791f2a2fa17db334c Mon Sep 17 00:00:00 2001 From: Thomas Pointhuber Date: Thu, 21 Jan 2016 16:25:40 +0100 Subject: [PATCH] [enh] improve translation documentation --- _sources/dev/translation.txt | 36 +++++++++++++++++------------ _static/pygments.css | 2 ++ _static/searchtools.js | 45 +++++++++++++++++++++++++++++------- dev/engine_overview.html | 18 +++++++-------- dev/plugins.html | 18 +++++++-------- dev/search_api.html | 2 +- dev/translation.html | 37 +++++++++++++++++------------ docs/dev/translation.rst | 36 +++++++++++++++++------------ searchindex.js | 2 +- 9 files changed, 123 insertions(+), 73 deletions(-) diff --git a/_sources/dev/translation.txt b/_sources/dev/translation.txt index 0fc02a7d..c070c36e 100644 --- a/_sources/dev/translation.txt +++ b/_sources/dev/translation.txt @@ -6,23 +6,29 @@ run these commands in the root directory of searx Add new language ~~~~~~~~~~~~~~~~ -``pybabel init -i messages.pot -d searx/translations -l it`` +.. code:: shell + + pybabel init -i messages.pot -d searx/translations -l it Update .po files ~~~~~~~~~~~~~~~~ -``./utils/update-translations.sh`` +.. code:: shell + + ./utils/update-translations.sh You may have errors here. In that case, edit the ``update-translations.sh`` script to change ``pybabel`` to -``pybabel-python2`` +``pybabel-python2 or pybabel2`` After this step, you can modify the .po files. Compile translations ~~~~~~~~~~~~~~~~~~~~ -``pybabel compile -d searx/translations`` +.. code:: shell + + pybabel compile -d searx/translations Transifex stuff ~~~~~~~~~~~~~~~ @@ -32,12 +38,14 @@ Init Project .. code:: shell + tx init # Transifex instance: https://www.transifex.com/asciimoo/searx/ + tx set --auto-local -r searx.messagespo 'searx/translations//LC_MESSAGES/messages.po' \ --source-lang en --type PO --source-file messages.pot --execute -http://docs.transifex.com/developer/client/set +http://docs.transifex.com/client/init/ -*TODO: mapping between transifex and searx* +http://docs.transifex.com/client/set/ Get translations ^^^^^^^^^^^^^^^^ @@ -46,29 +54,27 @@ Get translations tx pull -a -http://docs.transifex.com/developer/client/pull +http://docs.transifex.com/client/pull Upload source File ^^^^^^^^^^^^^^^^^^ -:: +.. code:: shell tx push -s Upload all Translation ^^^^^^^^^^^^^^^^^^^^^^ -:: +.. code:: shell tx push -s -t -upload specifc Translation (only for admins) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +upload specifc Translation +~~~~~~~~~~~~~~~~~~~~~~~~~~ -:: +.. code:: shell tx push -t -l tr -http://docs.transifex.com/developer/client/push - -*TODO: upload empty files? (new translations)* +http://docs.transifex.com/client/push diff --git a/_static/pygments.css b/_static/pygments.css index 57eadc03..8213e90b 100644 --- a/_static/pygments.css +++ b/_static/pygments.css @@ -4,8 +4,10 @@ .highlight .err { border: 1px solid #FF0000 } /* Error */ .highlight .k { color: #007020; font-weight: bold } /* Keyword */ .highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ diff --git a/_static/searchtools.js b/_static/searchtools.js index 0e794fd3..efec3c43 100644 --- a/_static/searchtools.js +++ b/_static/searchtools.js @@ -10,6 +10,7 @@ */ +/* Non-minified version JS is _stemmer.js if file is provided */ /** * Porter Stemmer */ @@ -373,8 +374,7 @@ var Search = { } // lookup as search terms in fulltext - results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term)) - .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title)); + results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); // let the scorer override scores with a custom scoring function if (Scorer.score) { @@ -538,23 +538,47 @@ var Search = { /** * search for full-text terms in the index */ - performTermsSearch : function(searchterms, excluded, terms, score) { + performTermsSearch : function(searchterms, excluded, terms, titleterms) { var filenames = this._index.filenames; var titles = this._index.titles; - var i, j, file, files; + var i, j, file; var fileMap = {}; + var scoreMap = {}; var results = []; // perform the search on the required terms for (i = 0; i < searchterms.length; i++) { var word = searchterms[i]; + var files = []; + var _o = [ + {files: terms[word], score: Scorer.term}, + {files: titleterms[word], score: Scorer.title} + ]; + // no match but word was a required one - if ((files = terms[word]) === undefined) + if ($u.every(_o, function(o){return o.files === undefined;})) { break; - if (files.length === undefined) { - files = [files]; } + // found search word in contents + $u.each(_o, function(o) { + var _files = o.files; + if (_files === undefined) + return + + if (_files.length === undefined) + _files = [_files]; + files = files.concat(_files); + + // set score for the word in each file to Scorer.term + for (j = 0; j < _files.length; j++) { + file = _files[j]; + if (!(file in scoreMap)) + scoreMap[file] = {} + scoreMap[file][word] = o.score; + } + }); + // create the mapping for (j = 0; j < files.length; j++) { file = files[j]; @@ -576,7 +600,9 @@ var Search = { // ensure that none of the excluded terms is in the search result for (i = 0; i < excluded.length; i++) { if (terms[excluded[i]] == file || - $u.contains(terms[excluded[i]] || [], file)) { + titleterms[excluded[i]] == file || + $u.contains(terms[excluded[i]] || [], file) || + $u.contains(titleterms[excluded[i]] || [], file)) { valid = false; break; } @@ -584,6 +610,9 @@ var Search = { // if we have still a valid result we can add it to the result list if (valid) { + // select one (max) score for the file. + // for better ranking, we should calculate ranking by using words statistics like basic tf-idf... + var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]})); results.push([filenames[file], titles[file], '', null, score]); } } diff --git a/dev/engine_overview.html b/dev/engine_overview.html index f77cd515..d5eef0a0 100644 --- a/dev/engine_overview.html +++ b/dev/engine_overview.html @@ -190,8 +190,8 @@ overrides are the following:

example code

-
# engine dependent config
-categories = ['general']
+
# engine dependent config
+categories = ['general']
 paging = True
 language_support = True
 
@@ -313,17 +313,17 @@ used to specify a search request:

example code

-
# search-url
-base_url = 'https://example.com/'
-search_string = 'search?{query}&page={page}'
+
# search-url
+base_url = 'https://example.com/'
+search_string = 'search?{query}&page={page}'
 
-# do search-request
+# do search-request
 def request(query, params):
     search_path = search_string.format(
-        query=urlencode({'q': query}),
-        page=params['pageno'])
+        query=urlencode({'q': query}),
+        page=params['pageno'])
 
-    params['url'] = base_url + search_path
+    params['url'] = base_url + search_path
 
     return params
 
diff --git a/dev/plugins.html b/dev/plugins.html index cab13962..83d33985 100644 --- a/dev/plugins.html +++ b/dev/plugins.html @@ -45,19 +45,19 @@ searx.

example_plugin.py

-
name = 'Example plugin'
-description = 'This plugin extends the suggestions with the word "example"'
-default_on = False  # disable by default
+
name = 'Example plugin'
+description = 'This plugin extends the suggestions with the word "example"'
+default_on = False  # disable by default
 
-js_dependencies = tuple()  # optional, list of static js files
-css_dependencies = tuple()  # optional, list of static css files
+js_dependencies = tuple()  # optional, list of static js files
+css_dependencies = tuple()  # optional, list of static css files
 
 
-# attach callback to the post search hook
-#  request: flask request object
-#  ctx: the whole local context of the post search hook
+# attach callback to the post search hook
+#  request: flask request object
+#  ctx: the whole local context of the post search hook
 def post_search(request, ctx):
-    ctx['search'].suggestions.add('example')
+    ctx['search'].suggestions.add('example')
     return True
 
diff --git a/dev/search_api.html b/dev/search_api.html index 45a96bf0..f616c4cc 100644 --- a/dev/search_api.html +++ b/dev/search_api.html @@ -25,7 +25,7 @@ - + diff --git a/dev/translation.html b/dev/translation.html index b0c52aa1..71476214 100644 --- a/dev/translation.html +++ b/dev/translation.html @@ -43,58 +43,65 @@

run these commands in the root directory of searx

Add new language

-

pybabel init -i messages.pot -d searx/translations -l it

+
pybabel init -i messages.pot -d searx/translations -l it
+
+

Update .po files

-

./utils/update-translations.sh

+
./utils/update-translations.sh
+
+

You may have errors here. In that case, edit the update-translations.sh script to change pybabel to -pybabel-python2

+pybabel-python2 or pybabel2

After this step, you can modify the .po files.

Compile translations

-

pybabel compile -d searx/translations

+
pybabel compile -d searx/translations
+
+

Transifex stuff

Init Project

-
tx set --auto-local -r searx.messagespo 'searx/translations/<lang>/LC_MESSAGES/messages.po' \
+
tx init # Transifex instance: https://www.transifex.com/asciimoo/searx/
+
+tx set --auto-local -r searx.messagespo 'searx/translations/<lang>/LC_MESSAGES/messages.po' \
 --source-lang en --type PO --source-file messages.pot --execute
 
-

http://docs.transifex.com/developer/client/set

-

TODO: mapping between transifex and searx

+

http://docs.transifex.com/client/init/

+

http://docs.transifex.com/client/set/

Upload source File

-
tx push -s
+
tx push -s
 

Upload all Translation

-
tx push -s -t
+
tx push -s -t
 
-
-

upload specifc Translation (only for admins)

-
tx push -t -l tr
+
+

upload specifc Translation

+
tx push -t -l tr
 
-

http://docs.transifex.com/developer/client/push

-

TODO: upload empty files? (new translations)

+

http://docs.transifex.com/client/push

diff --git a/docs/dev/translation.rst b/docs/dev/translation.rst index 0fc02a7d..c070c36e 100644 --- a/docs/dev/translation.rst +++ b/docs/dev/translation.rst @@ -6,23 +6,29 @@ run these commands in the root directory of searx Add new language ~~~~~~~~~~~~~~~~ -``pybabel init -i messages.pot -d searx/translations -l it`` +.. code:: shell + + pybabel init -i messages.pot -d searx/translations -l it Update .po files ~~~~~~~~~~~~~~~~ -``./utils/update-translations.sh`` +.. code:: shell + + ./utils/update-translations.sh You may have errors here. In that case, edit the ``update-translations.sh`` script to change ``pybabel`` to -``pybabel-python2`` +``pybabel-python2 or pybabel2`` After this step, you can modify the .po files. Compile translations ~~~~~~~~~~~~~~~~~~~~ -``pybabel compile -d searx/translations`` +.. code:: shell + + pybabel compile -d searx/translations Transifex stuff ~~~~~~~~~~~~~~~ @@ -32,12 +38,14 @@ Init Project .. code:: shell + tx init # Transifex instance: https://www.transifex.com/asciimoo/searx/ + tx set --auto-local -r searx.messagespo 'searx/translations//LC_MESSAGES/messages.po' \ --source-lang en --type PO --source-file messages.pot --execute -http://docs.transifex.com/developer/client/set +http://docs.transifex.com/client/init/ -*TODO: mapping between transifex and searx* +http://docs.transifex.com/client/set/ Get translations ^^^^^^^^^^^^^^^^ @@ -46,29 +54,27 @@ Get translations tx pull -a -http://docs.transifex.com/developer/client/pull +http://docs.transifex.com/client/pull Upload source File ^^^^^^^^^^^^^^^^^^ -:: +.. code:: shell tx push -s Upload all Translation ^^^^^^^^^^^^^^^^^^^^^^ -:: +.. code:: shell tx push -s -t -upload specifc Translation (only for admins) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +upload specifc Translation +~~~~~~~~~~~~~~~~~~~~~~~~~~ -:: +.. code:: shell tx push -t -l tr -http://docs.transifex.com/developer/client/push - -*TODO: upload empty files? (new translations)* +http://docs.transifex.com/client/push diff --git a/searchindex.js b/searchindex.js index a2b5d0e1..a16afc77 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:46,filenames:["dev/contribution_guide","dev/engine_overview","dev/install/installation","dev/plugins","dev/search_api","dev/translation","index","user/search_syntax"],objects:{},objnames:{},objtypes:{},terms:{"boolean":1,"break":0,"byte":1,"case":5,"char":0,"default":0,"function":[0,1,3,4],"import":2,"int":1,"new":[],"null":2,"return":[],"static":3,"switch":0,"true":[1,2,3],"while":[3,6],a2enmod:2,abbrev:7,about:[0,1,2,6],abov:[0,2],accept:[0,7],access_log:2,activ:[2,4],adapt:1,add:[],addit:2,addition:6,address:1,adopt:0,adress:1,after:5,agent:1,aggreg:6,all:[],allow:[2,7],alreadi:[0,1],also:[0,7],alter:0,alwai:1,among:0,anonym:6,anoth:1,apache2:2,api_kei:1,app:2,appli:2,applic:2,appreci:0,apt:2,arrai:1,asciimoo:2,aspect:0,assign:1,attach:3,author:0,auto:5,avail:2,back:[1,2],base:1,base_url:[1,2],bash:2,becaus:[0,1],behaviour:0,below:2,better:[1,2,3],between:[1,5],bin:2,born:0,both:[0,4],boundingbox:1,browser:0,bugreport:0,build:[1,2],calcul:1,call:3,callback:3,can:[0,1,2,3,5,6],capabl:0,care:0,categori:[1,4,7],certif:2,chainabl:7,chang:[1,2,5],chapter:0,chdir:2,chmod:2,choos:[0,1],chown:2,citi:1,client:5,clone:2,collect:6,com:[1,2,5],combin:2,come:0,comma:4,command:[2,5],compon:3,concern:0,conf:2,config:[1,2],connect:6,consequ:0,contain:1,content:2,context:3,convent:0,cooki:[1,6],corner:0,count:2,countri:1,coupl:2,cpu:2,creat:2,css:3,css_depend:3,cthulhu:7,ctx:3,current:[],custom:[0,7],customlog:2,data:[1,6],date:1,datetim:1,ddg:7,debian:2,debug:2,decim:1,def:[1,3],default_on:3,demon:2,depend:[1,2],descript:[3,4],deserv:0,dev:2,develop:[],deviat:0,differ:[0,1,3],digit:6,directori:5,disrespect:0,doc:[1,5],doe:[0,6],doesn:0,domain:2,domin:0,don:0,duckduckgo:7,easili:0,edit:[2,5],educ:0,empti:5,en_u:1,enabl:[0,2],encrypt:6,engin:[],enough:0,enter:2,equival:4,error:5,error_log:2,essenti:2,etc:[0,2],everi:1,everyth:2,exampl:[],except:0,execut:5,exist:0,exit:2,expand:0,expect:0,explain:0,extend:3,extern:1,facil:0,fals:[2,3],fanci:0,featur:[],feedback:0,feel:3,file:[],filenam:1,files:1,fill:1,fine:2,flask:3,folder:1,follow:[0,1],followsymlink:2,forget:0,fork:0,format:1,free:[],from:[],further:[],furthermor:1,geojson:1,get:[],gid:2,git:2,github:2,give:1,goal:0,goe:0,good:0,grant:2,hack:0,hackerspac:7,handler:2,happen:0,happi:0,have:[1,2,4,5],header:1,here:[0,5],hex:2,highli:0,hour:2,hous:1,house_numb:1,html:1,http:[1,2,5,6],https_rewrit:3,imag:[],img_src:1,implement:[],includ:2,inclus:7,index:2,inform:[1,6],ini:2,init:[],insert:1,insid:[1,3],instanc:2,intent:0,interfer:0,internet:6,interpret:2,interpretor:2,iso:1,itself:0,js_depend:3,kei:1,known:0,lack:0,lang:5,language_support:1,lat:1,latitud:1,lc_messag:5,least:[0,1],leech:1,leecher:1,level:0,libapache2:2,libffi:2,librari:1,libssl:2,libxslt:2,light:2,like:[1,2,3],line:0,list:[1,3,4,7],listen:2,local:[1,2,3,5],localhost:2,locat:2,lon:1,longitud:1,magnet_uri_schem:1,magnetlink:1,mai:5,main:0,make:1,manner:0,map:5,mass:0,master:2,math:3,max:1,maximis:0,maximum:[0,1],mayb:0,media:1,messag:5,messagespo:5,meta:0,method:[1,4],might:0,min:1,misbehav:0,mod:2,modif:0,modifi:[5,7],modul:2,more:3,most:1,multibl:1,must:1,name:[1,3,4],necessari:2,need:0,net:6,none:1,nor:6,normal:1,note:2,number:[1,2,4],number_of_result:1,object:[1,3],observ:0,offer:6,often:1,okhin:2,on_result:3,onli:[],onlin:6,openssl:2,option:[1,2,3,4],org:1,organis:6,origin:2,osm:1,other:[0,1,6],otherwis:1,out:0,over:6,overwrit:1,overwritten:1,packag:2,page:[1,4,7],pageno:[1,4],pagenumb:1,parallel:3,param:1,paramt:1,parti:6,partli:1,path:2,pep8:0,per:1,perform:1,perserv:0,pip:2,place:[0,1],pleas:0,plugin:[],point:[],possibl:1,post:[0,2,3,4],post_search:3,postcod:1,pot:5,pre:3,pre_search:3,prefer:7,prefix:7,preserv:0,preview:1,proce:2,profil:6,promot:6,protect:0,provid:[0,1],publish:1,publishedd:1,pull:[0,2,5],purpos:1,push:5,pybabel:[2,5],python2:5,python:[0,1,2],pythonpath:2,quadratur:6,queri:[1,4,7],quit:0,qwer:7,rand:2,random:1,realli:1,recommend:1,reconsid:0,redefin:1,reduc:0,rememb:0,replac:3,repo:0,repositori:2,repres:1,request:0,requir:[1,2,3,4],respec:0,respect:[],restart:2,result:[],rewrit:2,right:[2,6],road:1,root:[2,5],round:0,run:[2,3,5],same:1,script:5,script_nam:2,search:[],search_path:1,search_str:1,searx:[],secur:6,sed:2,see:[3,4,7],seed:1,seeder:1,select:7,self:6,separ:4,seper:0,server_nam:2,servic:2,set:[],sethandl:2,setup:2,share:6,shortcut:1,should:[0,2],simpli:0,sinc:0,singl:2,site:[1,2],size:1,small:1,socket:2,softwar:6,solver:3,some:[0,1,2],someth:0,sourc:[],special:1,specif:[1,2],specifi:4,ssl:[1,2,6],standard:[0,1],start:[1,2],stash:2,step:[2,5],store:[1,6],street:1,string:1,submit:0,sudo:2,suggest:3,support:[0,1,4],sure:[0,2],syntax:[],taken:0,tell:1,templat:1,test:[0,2],text:1,thi:[0,1,2,3,5],thing:3,think:0,third:6,thu:0,thumbnail:1,thumbnail_src:1,time:1,timeout:1,titl:1,tld:2,tool:0,tor:6,torrentfil:1,toward:0,track:6,transifex:[],try_fil:2,tupl:3,twice:2,txt:2,type:[1,5],ubuntu:2,uid:2,ultrasecretkei:2,uncommon:0,unfortun:0,univers:2,unix:2,unspecifi:1,updat:[],upgrad:2,uri:2,urlencod:1,user:[0,1,2,6],useradd:2,usr:2,usual:2,util:5,uwsgi_modifier1:2,uwsgi_param:2,uwsgi_pass:2,uwsgisocket:2,valid:1,valu:1,variabl:1,variou:[0,3],vendor:0,verifi:1,via:7,virtual:2,virtualenv:2,wai:0,want:1,warn:2,wathev:1,webapp:2,weird:0,welcom:0,what:1,when:1,where:1,which:[0,1,6],who:2,whole:[2,3],wide:0,width:0,wiki:[0,1],wikipedia:[1,7],without:1,word:3,work:[0,1,2],worker:2,world:0,wsgi:2,yet:1,yml:[],you:[0,1,2,5,7],your:2,yourself:0,zlib1g:2},titles:["How to contribute","Engine overview","Installation","Plugins","Search API","Translation","Privacy-respecting free metasearch engine","Search syntax"],titleterms:{"default":1,"new":5,"return":1,add:5,admin:5,all:5,apach:2,api:4,argument:1,basic:2,check:2,code:[0,1],compil:5,configur:[1,2],content:1,contribut:0,current:3,design:0,develop:6,direct:0,disabl:2,document:[0,6],endpoint:4,engin:[1,6],entri:3,exampl:[1,7],example_plugin:3,featur:6,file:[1,5],free:6,from:2,further:6,gener:1,get:5,hackabl:0,hook:3,host:2,how:[0,2],imag:1,implement:3,init:5,instal:2,languag:5,log:2,map:1,metasearch:6,nginx:2,onli:5,overrid:1,overview:1,paramet:4,pars:1,pass:1,plugin:3,point:3,prime:0,privaci:[0,6],project:5,read:6,request:1,respect:6,result:1,search:[4,7],searx:2,server:2,set:1,sourc:5,specifc:5,stuff:5,subdirectori:2,syntax:7,todo:3,torrent:1,transifex:5,translat:[0,5],updat:[2,5],upload:5,url:2,uwsgi:2,video:1,web:2,yml:1}}) \ No newline at end of file +Search.setIndex({envversion:46,filenames:["dev/contribution_guide","dev/engine_overview","dev/install/installation","dev/plugins","dev/search_api","dev/translation","index","user/search_syntax"],objects:{},objnames:{},objtypes:{},terms:{"boolean":1,"break":0,"byte":1,"case":5,"char":[],"default":[],"function":[1,3,4],"import":2,"int":1,"new":[],"null":2,"return":[],"static":3,"switch":0,"true":[1,2,3],"while":[3,6],a2enmod:2,abbrev:7,abl:[0,1],about:[0,2,6],abov:[0,2],accept:7,access_log:2,activ:[2,4],adapt:1,add:[],addit:[1,2],addition:6,address:1,adopt:0,adress:1,after:5,agent:1,aggreg:6,all:[],allow:[2,7],alreadi:0,also:[0,2,7],alter:0,alwai:1,among:0,anonym:6,anoth:1,apache2:2,api_kei:1,app:2,appli:[0,2],applic:2,appreci:[],appropri:0,apt:2,arbitrari:1,arrai:1,asciimoo:[2,5],aspect:0,assign:1,attach:3,author:0,auto:5,avail:2,back:2,base:1,base_url:[1,2],bash:2,becaus:[0,1],behaviour:0,below:[0,2],better:[1,2,3],between:1,bin:2,born:0,both:[0,4],boundingbox:1,branch:0,browser:0,bugreport:0,build:[0,2],built:[0,1],calcul:[],call:3,callback:3,can:[0,1,2,3,5,6],capabl:0,care:[],categori:[1,4,7],certif:2,chainabl:7,chang:[2,5],chapter:0,charact:0,chdir:2,checkout:0,chmod:2,choos:[0,1],chown:2,citi:1,client:5,clone:2,collect:6,com:[1,2,5],combin:2,come:0,comma:4,command:[2,5],compon:3,concern:0,conf:2,config:[1,2],connect:6,consequ:0,construct:1,contain:[],content:[],context:3,convent:0,cooki:[1,6],corner:0,could:1,count:2,countri:1,coupl:2,cpu:2,creat:[0,2],css:3,css_depend:3,cthulhu:7,ctx:3,current:[],custom:[0,7],customlog:2,data:[1,6],date:1,datetim:1,ddg:7,debian:2,debug:2,decim:1,def:[1,3],default_on:3,demon:2,depend:[1,2],deploi:2,descript:[3,4],deserv:0,desir:1,dev:2,develop:[],deviat:[],differ:[0,1,3],digit:6,directori:5,disrespect:0,doc:5,dockerfil:2,doe:[1,6],doesn:[],domain:2,domin:0,don:[],duckduckgo:7,easili:0,edit:[0,2,5],educ:[],effect:0,embed:2,empti:[],en_u:1,enabl:[0,2],encrypt:6,engin:[],enough:[],enter:2,equival:4,error:5,error_log:2,essenti:2,etc:[0,2],everi:1,everyth:2,exampl:[],except:0,execut:5,exist:0,exit:2,expand:[],expect:0,explain:0,extend:[0,3],extens:0,extern:1,facil:[],fals:[2,3],fanci:0,featur:[],feedback:0,feel:3,few:[0,1],file:[],filenam:1,files:1,fill:[],fine:2,fix:0,flask:3,folder:[0,1],follow:[0,1],followsymlink:2,forget:[],fork:0,format:1,free:[],from:[],further:[],furthermor:1,geojson:1,get:[],gid:2,git:2,github:2,give:1,goal:[],goe:[],good:0,grant:2,hack:0,hackerspac:7,handler:2,happen:[],happi:0,have:[0,1,2,4,5],header:1,here:5,hex:2,highli:[],hour:2,hous:1,house_numb:1,howev:1,html:[0,1],http:[1,2,5,6],https_rewrit:3,hub:2,imag:[],img_src:1,implement:[],includ:2,inclus:7,index:2,inform:[0,1,2,6],ini:2,init:[],insert:[],insid:[1,3],instanc:[2,5],intent:0,interfer:0,internet:6,interpret:2,interpretor:2,iso:1,itself:0,js_depend:3,kei:1,known:[],lack:0,lang:5,language_support:1,lat:1,latitud:1,lc_messag:5,least:[],leech:1,leecher:1,length:0,level:0,libapache2:2,libffi:2,librari:[],libssl:2,libxslt:2,light:2,like:[1,2,3],line:0,list:[1,3,4,7],listen:2,local:[1,2,3,5],localhost:2,locat:2,lon:1,longitud:1,magnet_uri_schem:[],magnetlink:1,mai:5,main:[],make:[],manag:2,manner:[],map:[],mass:0,master:2,math:3,matter:1,max:1,maxim:0,maximis:[],maximum:[0,1],mayb:[],media:1,messag:5,messagespo:5,meta:[],method:[1,4],might:0,min:1,misbehav:0,mod:2,modif:[],modifi:[5,7],modul:2,more:[2,3],most:[],multibl:1,must:[0,1],name:[1,2,3,4],necessari:2,need:0,net:6,none:1,nor:6,normal:1,note:[0,2],number:[1,2,4],number_of_result:1,object:[1,3],observ:[],off:0,offer:6,often:1,okhin:2,on_result:3,onli:[],onlin:6,openssl:2,option:[1,2,3,4],order:0,org:1,organis:6,origin:2,osm:1,other:[0,1,6],otherwis:1,out:0,over:6,overwrit:[],overwritten:1,packag:2,page:[0,1,4,7],pageno:[1,4],pagenumb:1,parallel:3,param:1,paramt:1,parti:6,partli:1,patch:0,path:2,pep8:0,per:1,perform:1,perserv:[],pip:0,place:[0,1],pleas:0,plenti:0,plugin:[],point:[],port:2,possibl:2,post:[0,2,3,4],post_search:3,postcod:1,pot:5,pre:3,pre_search:3,prefer:7,prefix:7,preserv:0,preview:1,proce:2,profil:6,promot:6,protect:0,provid:[0,1],publish:1,publishedd:1,pull:[0,2,5],purpos:1,push:5,pybabel2:5,pybabel:[2,5],python2:5,python:2,pythonpath:2,quadratur:6,queri:[1,4,7],quit:0,qwer:7,rand:2,random:1,realli:[],recommend:1,reconsid:0,redefin:1,reduc:0,rememb:0,replac:3,repo:0,repositori:2,repres:1,request:[],requir:[0,1,3,4],respec:[],respect:[],restart:2,result:[],rewrit:2,right:[2,6],road:1,root:[2,5],round:0,rst:0,run:[2,3,5],same:1,script:5,script_nam:2,search:[],search_path:1,search_str:1,searx:[],secur:6,sed:2,see:[2,3,4,7],seed:1,seeder:1,select:7,self:6,separ:[0,4],seper:[],server_nam:2,servic:2,set:[],sethandl:2,setup:2,share:6,shortcut:1,should:[0,2],simpli:0,sinc:[],singl:2,site:[1,2],size:1,small:1,socket:2,softwar:6,solver:3,some:2,someth:0,sourc:[],special:1,specif:[1,2],specifi:[1,4],sphinx:0,ssl:[1,2,6],standard:[0,1],start:[1,2],stash:2,step:[0,2,5],store:[1,6],street:1,string:1,submit:0,sudo:2,suggest:3,support:[0,1,4],sure:2,syntax:[],system:0,take:0,taken:[],tell:1,templat:1,test:[0,2],text:1,thi:[1,2,3,5],thing:3,think:0,third:6,three:0,thu:[],thumbnail:1,thumbnail_src:1,time:1,timeout:1,titl:1,tld:2,tool:0,tor:6,torrentfil:1,toward:[],track:6,transifex:[],try_fil:2,tupl:3,turn:0,twice:2,two:0,txt:0,type:[1,5],ubuntu:2,uid:2,ultrasecretkei:2,uncommon:0,under:[0,1],unfortun:0,unit:0,univers:2,unix:2,unspecifi:1,updat:[],update_packag:2,upgrad:[],uri:2,urlencod:1,user:[0,1,2,6],useradd:2,usr:2,usual:2,util:5,uwsgi_modifier1:2,uwsgi_param:2,uwsgi_pass:2,uwsgisocket:2,valid:1,valu:1,variabl:1,variou:[0,3],vendor:0,verifi:1,via:7,virtual:2,virtualenv:2,wai:[0,1],want:[],warn:2,wathev:[],webapp:2,weird:0,welcom:[],what:[],whatev:2,when:1,where:[],which:[0,1,6],who:2,whole:[2,3],wide:0,width:[],wiki:[],wikipedia:7,wish:0,without:1,wonderfal:2,word:3,work:[0,1,2],worker:2,world:0,wsgi:2,www:5,yet:1,yml:[],you:[0,2,5,7],your:[0,2],yourself:0,zlib1g:2},titles:["How to contribute","Engine overview","Installation","Plugins","Search API","Translation","Privacy-respecting free metasearch engine","Search syntax"],titleterms:{"default":1,"new":5,"return":1,add:5,admin:[],all:5,apach:2,api:4,argument:1,basic:2,check:2,code:[0,1],compil:5,configur:[1,2],content:[1,2],contribut:0,current:3,design:0,develop:6,direct:0,disabl:2,docker:2,document:[0,6],endpoint:4,engin:[1,6],entri:3,exampl:[1,7],example_plugin:3,featur:6,file:[1,5],free:6,from:2,further:6,gener:1,get:5,hackabl:0,hook:3,host:2,how:[0,2],imag:1,implement:3,init:5,instal:2,languag:5,log:2,make:1,map:1,metasearch:6,nginx:2,onli:[],overrid:1,overview:1,paramet:4,pars:1,pass:1,plugin:3,point:3,prime:0,privaci:[0,6],project:5,read:6,request:1,respect:6,result:1,search:[4,7],searx:2,server:2,set:1,sourc:5,specifc:5,stuff:5,subdirectori:2,syntax:7,todo:3,torrent:1,transifex:5,translat:[0,5],updat:[2,5],upload:5,url:2,uwsgi:2,video:1,web:2,yml:1}}) \ No newline at end of file