문제

나는 스핑크스를 처음 접했고 새로운 웹 사이트에 설정하고 있습니다. 잘 작동하고 검색 할 때 검색 콘솔에서 모든 것이 작동합니다.

PHP API와 검색을 사용하면 동일한 결과도 제공합니다. 그러나 그것은 나에게 발견 된 행에 대한 ID와 가중치 만 제공합니다. 예를 들어 'Matches'해시와 함께 텍스트 필드 토그레터를 가져 오는 방법이 있습니까?

이를 수행 할 방법이 없다면 Spinx Weight Sort 순서 (동시에 모든 것을 검색)에서 데이터베이스 (SQL)에서 레코드를 검색하는 방법에 대한 좋은 아이디어가 있습니까?

도움이 되었습니까?

해결책

순서대로 MySQL Field () 함수 호출을 사용하여 모든 것이 지정된 순서의 순서에 있는지 확인할 수 있습니다.


$idlist = array();
foreach ( $sphinx_result["matches"] as $id => $idinfo ) {
    $idlist[] = "$id";
}
$ids = implode(", ", $idlist);

SELECT * FROM table WHERE id IN ($ids) ORDER BY FIELD(id, $ids)

다른 팁

예, Sphinx는 결과를 가져 오지 않습니다. 그러나 in () 조항을 사용하여 쿼리를 재정렬하여 모든 것을 하나로 모으는 간단한 방법을 알게되었습니다.

뭔가를 쿼리합니다

SELECT * FROM table WHERE id IN(id_list... )

테이블에 ID를 사용하여 결과를 색인화합니다.

while ($row = mysql_fetch_objects)
   $result[$row->id] = $row; 

그리고 스핑크스에서 일치하는 결과를 얻는 것은 매우 쉽습니다.

$ordered_result = array();
foreach ($sphinxs_results['matches'] as $id => $content)
   $ordered_result[] = $result1[$id];

$ sphinxs_results가 올바른 순서 인 경우 작동해야합니다.

거의 Pat의 대답이지만 하나의 루프가 적습니다. 큰 결과에서 약간의 차이를 만들 수 있다고 생각합니다.

불행히도 Sphinx는 일치하는 필드를 반환하지 않았으며 ID 만 반환하지 않았습니다 (Sphinx Index에는 데이터가 포함되어 있지 않았습니다 - 데이터의 해시 만). SphinxSearch.com 포럼에서 찾을 수있는이 문제에 대해 게시하십시오.

Alex가 말했듯이 Sphinx는 해당 정보를 반환하지 않습니다. IDS를 사용하여 데이터베이스를 직접 쿼리해야합니다. 각 ID를 통해 루프를 반복하고 관련 데이터를 가져와 결과를 가중 순서로 유지하십시오. 한 쿼리로 모든 것을 수행하려면 다음과 같은 것을 시도 할 수 있습니다 (psuedo -code -php ai n't my language of choice) :

results = db.query("SELECT * FROM table WHERE id IN (%s)", matches.join(", "));
ordered_results = [];

for (match in matches) {
  for (result in results) {
    if (result["id"] == match) {
      ordered_results << result;
    }
  }
}

return ordered_results;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top