2

학교를 위해 정보 검색 작업을하고 있습니다. 이 계획은 단어의 처음 두 글자를 키로 사용하고 두 글자가 단어 값을 문자열 값으로 사용하여 단어의 해시 맵을 만드는 것입니다. 그래서,뒤집기 색인 작성 지원

해시 맵 [ "바"] = "나쁜 보리 기본"

내가 그 해시 맵을 선을 토큰 화 끝났어요되면, 직렬화 및 키의 이름을 따서 명명 텍스트 파일에 추가 할 수 있습니다.

데이터를 가져 와서 수백 개의 파일에 분산하면 각 파일의 밀도를 줄임으로써 검색을 수행하는 데 걸리는 시간이 줄어 듭니다. 내가 겪고있는 문제는 각각의 파일을 100 개 이상 만들 때 어떤 이유로 파일을 몇 개 만들지 못하는 것입니다. 그래서 그 파일은 비어 있습니다. 더 효율적으로 만들 수있는 방법이 있습니까? 이것을 계속할 가치가 있습니까, 아니면 그것을 버려야합니까?

저는 PHP를 사용하고 있습니다. 비교적 친숙한 두 언어는 PHP와 Java입니다. 프론트 엔드가 매우 간단하고 문제없이 자동 완성/추천 검색과 같은 기능을 추가 할 수 있기 때문에 PHP를 선택했습니다. 나는 또한 자바를 사용함에있어서 어떠한 이득도 얻지 못한다. 감사합니다. 감사합니다.

+0

데이터베이스를 사용 하시겠습니까? – VolkerK

+0

불행히도 아닙니다. 나는 모든 것을 독자적으로 색인하고 선택해야한다. – tipu

답변

2

하나의 파일을 사용하여 직렬화 된 문자열을 가져오고 넣습니다. 또한 json을 직렬화로 사용합니다.

당신은 당신이 해결하려고하는 문제를 설명하지 않은 데이터

$jsonContent = file_get_contents("a-z.txt"); 
$hashmap = json_decode($jsonContent); 

foreach($hashmap as $firstTwoCharacters => $value) { 
    if ($firstTwoCharacters == 'ba') { 
     $wordCount = count($value); 
    } 
} 
+0

29MB의 txt 파일로 작업하고 있습니다. json_encode ($ hashmap)를 포함하는 단일 파일이 비효율적이라고 생각하지 않습니다. – tipu

+0

각 알파 문자의 파일 위치가 바뀔 수 있습니다. a.txt, b.txt, c.txt. 데이터를 검색하는 경우 세금이 부과됩니다. 추가가 발생하면 a-z.txt에만 쓸 수 있습니다. 실제로 데이터를 사용하는 대상에 달려 있습니까? –

0

얻기 데이터

$string = "bad barley base"; 
$data = explode(" ",$string); 
$hashmap["ba"] = $data; 

$jsonContent = json_encode($hashmap); 
file_put_contents("a-z.txt",$jsonContent); 

를 넣습니다. 전체 텍스트 검색 엔진을 만들려고 노력하고 있지만 hashmap에 문서 ID가 없으므로 hashmap을 사용하여 일치하는 문서를 찾는 방법을 잘 모릅니다.

전체 텍스트 검색 엔진을 원할 경우 데이터 구조에 trie을 사용합니다. 당신은 너무 커지지 않고 모든 것을 그것 안에 넣을 수 있어야합니다. 색인을 생성하려는 단어와 일치하는 노드에는 해당 단어가 들어있는 문서의 ID가 포함됩니다.

+0

당신은 전 텍스트 검색 엔진을 만들고 있다고 가정 할 때 정말로 옳습니다. 나는 현재 순간적으로 trie 데이터 구조를 살펴보고 있는데, 이것은 내가 지금하고있는 것보다 훨씬 효율적입니다 (위에서 설명한 것입니다). 나는 이것을 지금 구현하려고한다. 고마워! – tipu

+0

http://www.ics.uci.edu/~chenli/pubs.html로 이동하여 Efficient Interactive Fuzzy Keyword Search라는 제목의 논문을보십시오. – jshen