Pergunta

Eu sou novo para Esfinge, e eu estou seting-lo em um novo site. É bom trabalhar, e quando eu procurar com o procurar na consola, tudo trabalho.

Usando a API PHP eo procurou, me dá os mesmos resultados também. Mas dá-me apenas ids e pesos para as linhas encontradas. Existe alguma maneira de trazer alguns campos de texto togheter com haxixe dos jogos ', por exemplo?

Se não houver nenhuma maneira de fazer isso, alguém tem uma boa idéia sobre como recuperar os registros do banco de dados (SQL) na ordem esfinge peso sort (pesquisar todos eles ao mesmo tempo)?

Foi útil?

Solução

Você pode usar um campo mysql () chamada de função em sua ORDER BY para garantir que tudo está na esfinge ordem especificada.


$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)

Outras dicas

É, esfinge não traz os resultados. Mas eu descobri uma maneira simples para reordenar a consulta usando a cláusula IN (), para trazer todos juntos.

quering algo

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

apenas indexar o resultado, com o seu ID na tabela:

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

e ter os resultados correspondentes de esfinge, é muito fácil para reordenar:

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

este deve trabalhar, se suas $ sphinxs_results estão na ordem correta.

resposta é quase do pat, mas com menos um loop. Pode fazer algum diference em grandes resultados, eu acho.

campos unfortually esfinge não retorna correspondidos, apenas a sua ids (índice esfinge não contém dados - única hash a partir de dados). Post sobre este assunto você pode encontrar no fórum sphinxsearch.com.

Como Alex diz, Esfinge não retorna essa informação. Você terá que usar os IDs para consultar o banco de dados a si mesmo - apenas percorrer cada ID, obter os seus dados relevantes para fora, mantendo os resultados, a fim de ponderação. Para fazer tudo isso em uma consulta, você pode tentar algo como o seguinte (pseudo-code - PHP não é a minha língua da escolha):

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top