Maison >développement back-end >tutoriel php >Comment utiliser le moteur de recherche Sphinx en PHP

Comment utiliser le moteur de recherche Sphinx en PHP

小云云
小云云original
2018-03-21 14:12:102602parcourir

Sphinx est un moteur de recherche efficace. La recherche par segmentation de mots est relativement rapide. L'index est créé et stocké dans les fichiers du disque dur. Il possède son propre ensemble de bases de données intégrées. cela peut aider tout le monde.

Utiliser le moteur de recherche sphinx en php

sphinx est un moteur de recherche efficace La vitesse de recherche par segmentation de mots est relativement rapide. L'index est établi et stocké dans le fichier du disque dur. Il n'interférera pas avec la base de données et possède son propre ensemble de bases de données intégrées

1 Installez sphinx sur Ubuntu

Si aptitude n'est pas installé, vous devez installer aptitude. d'abord parce que l'utilisation d'apt get install pour installer la commande suivante entraînera des problèmes.<br> sudo apt-get install aptitude<br>sudo aptitude install sphinx3 sphinx3-doc sphinxsearch sphinx-common -y

2. Configuration

<br>

1

<br>

1

2

<br>

cd /etc/sphinxsearch/

cp sphinx.conf.sample sphinx.conf

2

<br>

cd /etc/sphinxsearch/

cp sphinx.conf.sample sphinx .conf

修改配置文件如下<br>

<br>

1

<br>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

<br>

source src1

{

type = mysql

sql_host = localhost

sql_user = root

sql_pass = magicmoma

sql_db = coupon_20160901

sql_port = 3306 # optional, default is 3306

sql_query = SELECT couponid,title,description FROM app_coupon_api

##### 需要包含主键,分词索引字段 ########

}

index test1

{

source = src1

path = /var/lib/sphinxsearch/data/test1 #索引存放目录

docinfo = extern

mlock = 0

morphology = none

min_word_len = 1

charset_type = utf-8

min_prefix_len = 0

min_infix_len = 0

ngram_len = 1

html_strip = 0

}

indexer

{

mem_limit = 2048M

}

<br>

searchd

{

listen = 9312

listen = 9306:mysql41

log = /var/log/sphinxsearch/searchd.log

query_log = /var/log/sphinxsearch/query.log

read_timeout = 5

client_timeout = 300

max_children = 30

pid_file = /var/run/sphinxsearch/searchd.pid

max_matches = 1000

seamless_rotate = 1

preopen_indexes = 1

unlink_old = 1

mva_updates_pool = 1M

max_packet_size = 8M

max_filters = 256

max_filter_values = 4096

max_batch_queries = 32

workers = threads # for RT to work

}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

2627

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

<br>

source src1

{

type = mysql

sql_host = localhost

sql_user = root

sql_pass = magicmoma

sql_db = coupon_20160901

sql_port = 3306 # facultatif, la valeur par défaut est 3306sql_query = SELECT couponid,title,description FROM app_coupon_api

##### 需要包含主键,分词索引字段 ########

}

index test1

{

source = src1

path = /var/lib/sphinxsearch/data/test1 #索引存放目录

docinfo = extern

mlock = 0

morphologie = aucune

min_word_len = 1

charset_type = utf-8

min_prefix_len = 0

min_infix_len = 0

ngram_len = 1

html_strip = 0

}

indexer

{

mem_limit = 2048M

}

searchd

{

listen = 9312

listen = 9306:mysql41

log = /var/ log/sphinxsearch/searchd.log

query_log = /var/log/sphinxsearch/query.log

read_timeout = 5

client_timeout = 300

max_children = 30

pid_file = /var/run/sphinxsearch/searchd.pid

max_matches = 1000

seamless_rotate = 1

preopen_indexes = 1

unlink_old = 1

mva_updates_pool = 1M

max_packet_size = 8M

max_filters = 256

max_filter_values ​​= 4096

max_batch_queries = 32

workers = threads # pour que RT fonctionne

>

<br>

  1. L'exécution de la segmentation des mots de commande générera un ensemble de fichiers d'index dans le répertoire /var/lib/sphinxsearch/data/test1 <br>sudo indexer -c /etc/sphinxsearch/sphinx.conf test1

    test1 est le nom d'index du fichier de configuration ci-dessus

4.

2. Utiliser en php

sudo search -c /etc/sphinxsearch/sphinx.conf google1. Installer la bibliothèque de dépendances php sphinx

1 Installer aptitude

apt-get install aptitude2. Installez l'extension php sphinx <br>sudo aptitude install libsphinxclient-dev libsphinxclient-0.0.1 -yInstallez pecl

Installez sphinx

<br>sudo apt-get install php-pear php5-dev<br>3. Ajoutez le fichier de configuration php.ini. Extension Sphinx, <br>sudo pecl install sphinx Mon fichier php.ini est

pour obtenir l'emplacement de mon propre fichier php.ini en utilisant

<br>sudo vim /etc/php5/fpm/php.ini

Ajoutez :<br>extension=sphinx.so<br>4. Redémarrez php5-fpm et vérifiez si php charge le module sphinx <br>sudo /etc/init.d/php5-fpm restart<br>5. Exécutez le programme de recherche en arrière-plan <br>sudo searchd -c /etc/sphinxsearch/sphinx.conf <br>Port d'écoute par défaut dans le fichier de configuration : 9312

6. Appelez la recherche dans thinkphp <br>

<br>

1

<br>

1

2

3

4

5

6

7

8

9

10

11

12

13

<br>

public function testSphinx()

{

$s = new SphinxClient;

$s->setServer("localhost", 9312);

$s->SetArrayResult (true );

$s->setMatchMode(SPH_MATCH_ANY);

$s->setMaxQueryTime(3);

$result = $s->query("test");

$result = $result['matches'];

$result = array_column($result,'id');

$list = M('CouponApi')->field('couponid,title,description')->where(array('couponid'=>array('in',$result)))->select();

dump($list);

}

2

3$s->SetLimits(0, 1000, 1000);

4

5

6

7

8

9

10

11

12

13

<br>

public function testSphinx()

{

$s = new SphinxClient;

$s->setServer("localhost", 9312);

$s- > ;SetArrayResult (true );

$s->setMatchMode(SPH_MATCH_ANY);

$s->setMaxQueryTime(3);

$result = $s->query("test");

$result = $result['matches']; $result = array_column($result,'id');

$list = M('CouponApi')->field('couponid,title , description')->where(array('couponid'=>array('in',$result)))->select();

dump($list ) ;

}

La recherche est terminée et les résultats sont renvoyés (20 sont renvoyés par par défaut, modifiez le nombre de retours) En ajoutant ), la vitesse de recherche est assez rapide. Il faut moins de 10 secondes pour indexer les champs de titre et de description de 800 000 données. Le moteur de recherche prend en charge l'indexation incrémentielle, plusieurs modes. de recherche, et il y a beaucoup d'informations sur Internet

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn