php重建索引,重新建索引

本文目錄一覽:

php刪除數組指定元素並重建索引

mongodb中使用aggregate可以返回數組欄位數組的指定索引的元素

參考語句:

{$match:{‘duid’:15}},

{$project:{duid:1,”default”:1}},

{$unwind:”$default.styles”},

{$match:{‘default.styles.status’:1}},

{$group:{_id:”$_id”,”defaults”:{$push:”$default.styles”}}}

解釋:

1:過濾數據{$match:{‘duid’:15}}

2:獲取想要的列{$project:{duid:1,”default”:1}}

3:獲取展開後數組欄位{$unwind:”$default.styles”}

4:條件查詢數組元素{$match:{‘default.styles.status’:1}}

5:分組後保存結果{$group:{_id:”$_id”,”defaults”:{$push:”$default.styles”}}}

PHP重置索引

為什麼$array = array_values($array);後再列印出來的索引就是從0開始的

array_values()不是獲取數組的值嗎 跟重置索引有什麼關係

===================

是獲取數組的值,而且拋棄原數組的索引,重建一個數組.所以相當於重置索引.

php二維數組處理,並重置索引。。

直接用 array_flip 或者 array_unique 是不行的,你這沒有鍵名,必須要自己寫函數

?php

function unique_arr($array2D,$stkeep=false,$ndformat=true)

{

    // 判斷是否保留一級數組鍵 (一級數組鍵可以為非數字)

    if($stkeep) $stArr = array_keys($array2D);

    // 判斷是否保留二級數組鍵 (所有二級數組鍵必須相同)

    if($ndformat) $ndArr = array_keys(end($array2D));

    //降維,也可以用implode,將一維數組轉換為用逗號連接的字元串

    foreach ($array2D as $v){

        $v = join(“,”,$v);

        $temp[] = $v;

    }

    //去掉重複的字元串,也就是重複的一維數組

    $temp = array_unique($temp);

    //再將拆開的數組重新組裝

    foreach ($temp as $k = $v)

    {

        if($stkeep) $k = $stArr[$k];

        if($ndformat)

        {

            $tempArr = explode(“,”,$v);

            foreach($tempArr as $ndkey = $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;

        }

        else $output[$k] = explode(“,”,$v);

    }

    return $output;

}

$arr = array(

    0 = array

    (

        0 = 1,

        1 = 2

    ),

    1 = array

    (

        0 = 1,

        1 = 2

    ),

    2 = array

    (

        0 = 2,

        1 = 3

    ),

    3 = array

    (

        0 = 2,

        1 = 3

    ),

    4 = array

    (

        0 = 3,

        1 = 4

    ),

    5 = array

    (

        0 = 3,

        1 = 4

    ),

);

var_dump( array_values(unique_arr( $arr )) );

去重函數可參考:

.

php+mysql如何建立索引?怎麼樣運用?

1:較頻繁作為查詢、排序、分組和聯合操作的欄位創建索引。

2:唯一性太差的欄位不宜使用索引。

3:使用唯一索引。

4:使用短索引(若對字元串索引,盡量指定一個前綴長度)。

5:利用左前綴(複合索引可以起幾個索引的作用,可利用索引最左邊的列集來匹配行,稱左前綴)

6:不要過度索引(每個索引會佔用額外的磁碟空間,並降低寫操作的能力,修改數據索引也跟著更新)

7:更新非常頻繁的欄位不宜創建索引。

8:不會出現在where字句中的欄位無需索引。

php中數組的分類有哪兩種?

1、索引數組

有兩種創建索引數組的方法:

索引是自動分配的(索引從 0 開始):

$cars=array(“porsche”,”BMW”,”Volvo”);

2、關聯數組

關聯數組是使用您分配給數組的指定鍵的數組。

有兩種創建關聯數組的方法:

$age=array(“Bill”=”35″,”Steve”=”37″,”Elon”=”43”);

擴展資料

實用函數——

有相當多的實用函數作用於數組,參見數組函數一節。

注: unset() 函數允許取消一個數組中的鍵名。要注意數組將不會重建索引。

?php

$a = array( 1 = ‘one’, 2 = ‘two’, 3 = ‘three’ );

unset( $a[2] );

/* 將產生一個數組,定義為

$a = array( 1=’one’, 3=’three’);

而不是

$a = array( 1 = ‘one’, 2 = ‘three’);

*/

$b = array_values($a);

// Now $b is array(0 = ‘one’, 1 =’three’)

?

foreach 控制結構是專門用於數組的。它提供了一個簡單的方法來遍曆數組。

coreseek3.2 php 怎樣更新索引

php是無法更新 coreseek  的索引的,需要使用coreseek的語法,配合定時任務來自動更新索引。

這個寫起來很麻煩,我們的系統正好用了 coreseek ,說一下我的思路吧。

1、首先建立一個  search 表,這個表用來存你要進行搜索的、經過分詞的數據,分詞系統你們自己選,我使用的是php的pscws4中文分詞。

DROP TABLE IF EXISTS `search`;

CREATE TABLE `search` (

  `searchid` int(11) NOT NULL AUTO_INCREMENT,

  `title` varchar(255) NOT NULL,

  `content` text NOT NULL,

  `add_time` int(11) NOT NULL,

  PRIMARY KEY (`searchid`)

) ENGINE=MyISAM AUTO_INCREMENT=15209 DEFAULT CHARSET=utf8;

2、還需要一個 索引計數表 search_counter,這個表用來存放每次索引更新後的最大一個ID,下次更新索引的時候,就不需要從頭更新了,只需要比這個ID大的就可以。

DROP TABLE IF EXISTS `search_counter`;

CREATE TABLE `search_counter` (

  `counter_id` int(11) NOT NULL,

  `max_doc_id` int(11) NOT NULL,

  PRIMARY KEY (`counter_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、配置 coreseek ,以下是我在windows下 coreseek的配置文件,linux 在伺服器上,沒去找。這裡配置了2個索引源,一個是main,一個是增量索引delta,這樣不需要每次重建所有索引,只需要合併 main和delta就可以了。

#源定義

source main

{

    type                    = mysql

    sql_host                = 192.168.0.10

    sql_user                = root

    sql_pass                = root

    sql_db                  = database

    sql_port                = 3306

    sql_query_pre           = SET NAMES utf8

    sql_query_pre           = REPLACE INTO search_counter SELECT 1, MAX(searchid) FROM qhb_search

    sql_query               = SELECT searchid, title, content, controller_id, controller,add_time FROM search

                                                              #sql_query第一列id需為整數

                                                              #title、content作為字元串/文本欄位,被全文索引

    #sql_attr_uint           = searchid           #從SQL讀取到的值必須為整數

sql_attr_uint           = controller_id      # 資料庫ID過濾

sql_attr_uint           = controller         # 控制器過濾

    sql_attr_timestamp      = add_time #從SQL讀取到的值必須為整數,作為時間屬性

    sql_query_info_pre      = SET NAMES utf8                                        #命令行查詢時,設置正確的字符集

    #sql_query_info          = SELECT * FROM qhb_search WHERE searchid=$searchid #命令行查詢時,從資料庫讀取原始數據信息

}

source delta : main

 

{

 

    sql_query_pre  = SET NAMES utf8

    sql_query      = SELECT searchid, title, content, controller_id, controller,add_time FROM qhb_search WHERE searchid( SELECT max_doc_id FROM qhb_search_counter WHERE counter_id=1 )

sql_query_post = REPLACE INTO qhb_search_counter SELECT 1, MAX(searchid) FROM qhb_search

 

}

#index定義

index main

{

    source          = main             #對應的source名稱

    path            = D:/WebSoft/coreseek/var/data/main #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/…

    docinfo         = extern

    mlock           = 0

    morphology      = none

    min_word_len    = 1

    html_strip      = 0

    #中文分詞配置,詳情請查看:

    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux環境下設置,/符號結尾

    charset_dictpath  = D:/WebSoft/coreseek/etc/           #Windows環境下設置,/符號結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/…

    charset_type      = zh_cn.utf-8

}

index delta : main

 

{

    source = delta

    path   = D:/WebSoft/coreseek/var/data/delta

 

}

#全局index定義

indexer

{

    mem_limit            = 128M

}

#searchd服務定義

searchd

{

    listen              =   9312

    read_timeout        = 5

    max_children        = 30

    max_matches         = 1000

    seamless_rotate     = 0

    preopen_indexes     = 0

    unlink_old          = 1

    pid_file  = D:/WebSoft/coreseek/var/log/searchd_main.pid  #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/…

    log       = D:/WebSoft/coreseek/var/log/searchd_main.log        #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/…

    query_log = D:/WebSoft/coreseek/var/log/query_main.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/…

}

4、建立索引。必須要先建立索引, coreseek 才能啟動。下面是我在Windows的建立索引命令,如何使用命令行我就不贅述了。

D:\WebSoft\coreseek\bin\indexer –all –config d:\WebSoft\coreseek\bin\sphinx.conf

5、配置並啟動服務

D:\WebSoft\coreseek\bin\searchd –install –config 

D:\WebSoft\coreseek\bin\sphinx.conf –servicename coreseek

6、Windows創建定時任務,每分鐘更新一次索引

D:\WebSoft\coreseek\bin\indexer.exe –config D:\WebSoft\coreseek\bin\sphinx.conf delta –rotate

echo indexing, window will close when complete

7、Windows創建定時任務,每天凌晨2點合併索引

D:\WebSoft\coreseek\bin\indexer.exe –config D:\WebSoft\coreseek\bin\sphinx.conf –merge main delta –rotate

echo indexing, window will close when complete

8、附上 創建索引,重建索引,合併索引在windows及linux上的方法,以及一些使用上的小問題

windows:

建立索引

D:\WebSoft\coreseek\bin\indexer –all –config d:\WebSoft\coreseek\bin\sphinx.conf

重建索引

D:\WebSoft\coreseek\bin\indexer –config D:\WebSoft\coreseek\bin\sphinx.conf main –rotate

增量索引

D:\WebSoft\coreseek\bin\indexer –config D:\WebSoft\coreseek\bin\sphinx.conf delta –rotate

合併索引

D:\WebSoft\coreseek\bin\indexer –config D:\WebSoft\coreseek\bin\sphinx.conf –merge main delta –rotate

配置並啟動服務

D:\WebSoft\coreseek\bin\searchd –install –config D:\WebSoft\coreseek\bin\sphinx.conf –servicename coreseek

創建自定義詞庫方法:

1、先去  搜狗細胞詞庫下載需要的詞庫

2、使用 深藍詞庫轉換 將詞庫轉換為 txt

3、使用PHP程序將 生成的txt轉換為 coreseek 所需要的格式

4、附加到  unigram.txt

5、使用命令更新分詞詞庫

   cmd 進入 bin目錄,執行下面命令

   mmseg -u D:\WebSoft\coreseek\etc\unigram.txt

6、將生成的  unigram.txt.uni 改名為:uni.lib

7、重建索引

8、重啟coreseek服務

注意:

必須先建立索引,服務才能啟動

1、coreseek索引或者查詢時提示ERROR: invalid token in etc解決辦法

該提示表示當前的配置文件的編碼不是UTF-8(無BOM頭)格式,無法正確解析,請使用編輯軟體打開配置文件,另存為UTF-8(無BOM頭)格式;

2、failed to  lock …..try –rotate  

索引已經建立,使用重建索引命令

3、報警告:failed to scanf pid from 

沒有啟動coreseek服務

4、過濾搜索結果,必須使用數組傳遞,只支持   

無符號整數(1-32位寬);

UNIX 時間戳(timestamps);

浮點值(32位,IEEE 754單精度);

字元串序列 (尤其是計算出的整數值);

多值屬性 MVA( multi-value attributes ) (32位無符號整型值的變長序列)

$this-shpinx-SetFilter(‘controller’, array(1,2) );

CENTOS 操作方法

開機啟動coreseek搜索服務:

vi /etc/rc.d/rc.local  

在最後一行添加

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/bin/sphinx.conf

##如要停止搜索服務,請使用/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/bin/sphinx.conf –stop

##如要已啟動服務,要更新索引,請使用/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/bin/sphinx.conf –all –rotate

linux下編輯定時任務 crontab -e

#凌晨4點合併索引,其餘時間每分鐘更新索引

* 0-3 * * * /usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf delta –rotate

* 6-23 * * * /usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf delta –rotate

0 4 * * * /usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf –merge main delta –rotate

啟動服務:

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/bin/sphinx.conf

建立索引

/usr/local/coreseek/bin/indexer –all –config /usr/local/coreseek/bin/sphinx.conf

重建索引

/usr/local/coreseek/bin/indexer –config /usr/local/coreseek/bin/sphinx.conf main –rotate

增量索引

/usr/local/coreseek/bin/indexer –config /usr/local/coreseek/bin/sphinx.conf delta –rotate

合併索引

/usr/local/coreseek/bin/indexer –config /usr/local/coreseek/bin/sphinx.conf –merge main delta –rotate

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301663.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:09
下一篇 2024-12-30 16:09

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python基本索引用法介紹

    Python基本索引是指通過下標來獲取列表、元組、字元串等數據類型中的元素。下面將從多個方面對Python基本索引進行詳細的闡述。 一、列表(List)的基本索引 列表是Pytho…

    編程 2025-04-29
  • 如何將Oracle索引變成另一個表?

    如果你需要將一個Oracle索引導入到另一個表中,可以按照以下步驟來完成這個過程。 一、創建目標表 首先,需要在資料庫中創建一個新的表格,用來存放索引數據。可以通過以下代碼創建一個…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 索引abc,bc會走索引嗎

    答案是:取決於MySQL版本和表結構 一、MySQL版本的影響 在MySQL 5.6之前的版本中,MySQL會同時使用abc和bc索引。但在MySQL 5.6及之後的版本中,MyS…

    編程 2025-04-29
  • Python切片索引越界是否會報錯

    解答:當對一個字元串、列表、元組進行切片時,如果索引越界會返回空序列,不會報錯。 一、切片索引的概念 切片是指對序列進行操作,從其中一段截取一個新序列。序列可以是字元串、列表、元組…

    編程 2025-04-29
  • Python數組索引位置用法介紹

    Python是一門多用途的編程語言,它有著非常強大的數據處理能力。數組是其中一個非常重要的數據類型之一。Python支持多種方式來操作數組的索引位置,我們可以從以下幾個方面對Pyt…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27

發表回復

登錄後才能評論