AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-73541

Victor's questions

Martin Hope
Victor
Asked: 2018-05-29 12:48:55 +0800 CST

Manter as versões acentuadas e não acentuadas em uma coluna tsvector? [duplicado]

  • 4
Essa pergunta já tem resposta aqui :
Criando uma pesquisa que não diferencia maiúsculas de minúsculas e não diferencia acentos/diacríticos em um campo (1 resposta)
Fechado há 4 anos .

Estou enfrentando uma situação em que os usuários DEVEM enviar itens escritos em inglês simples. No entanto, acontece que os nomes têm acentos - vindos de vários idiomas. Eu tenho uma tsvectorcoluna na minha tabela que é indexada para pesquisa de texto completo.

Aqui estão as informações sobre esta coluna e informações relevantes sobre a tabela:

                                                         Table "public.companies"
     Column     |          Type          |                       Modifiers                        | Storage  | Stats target | Description 
----------------+------------------------+--------------------------------------------------------+----------+--------------+-------------
 id             | integer                | not null default nextval('companies_id_seq'::regclass) | plain    |              | 
 name           | character varying(128) | not null                                               | extended |              | 
 description    | text                   |                                                        | extended |              | 
 tsmeta         | tsvector               |                                                        | extended |              | 

Indexes:
    "companies_pkey" PRIMARY KEY, btree (id) CLUSTER
    "companies_search_idx" gin (tsmeta)
Triggers:
    companies_tsmeta_update BEFORE INSERT OR UPDATE ON companies FOR EACH ROW EXECUTE PROCEDURE companies_tsmeta_trigger()

Agora o problema vem quando o usuário cria um nome como français . Nem todos os usuários têm o caractere ç em mãos e aqueles que não têm terão problemas para encontrar essa entrada - o que significa que ela será armazenada com o cedilla-c na tsvectorcoluna. Então meu pensamento foi usar a unaccentextensão para tirar esses acentos. Porém agora os usuários que apenas digitarem français terão problemas e não encontrarão a entrada. Então eu criei uma função que apenas concatena as duas versões (acentuadas e sem acentos) do nome e das descrições. No entanto, as descrições podem ficar muito grandes e eu me preocupo que o índice leve muito armazenamento.

create or replace function companies_tsmeta_trigger() returns trigger as $$
begin
  new.tsmeta :=
    setweight(to_tsvector('english', coalesce(new.name, '')), 'A') ||
    setweight(to_tsvector('english', unaccent(coalesce(new.name, ''))), 'B') ||
    setweight(to_tsvector('english', coalesce(new.description, '')), 'C') ||
    setweight(to_tsvector('english', unaccent(coalesce(new.description, ''))), 'D');
  return new;
end;
$$ language plpgsql;

Quais são suas sugestões?

postgresql index
  • 1 respostas
  • 1555 Views
Martin Hope
Victor
Asked: 2015-09-13 03:59:06 +0800 CST

Valor padrão para a coluna "microtime" no MySQL

  • 5

Meu interesse é armazenar o tempo com FSP de 6. Como li, isso não pode ser obtido com TIMESTAMPou DATETIMEtipos de dados. Então, eu tenho um doublecampo para armazenar a saída da microtimefunção.

Existe alguma maneira de definir (ou até mesmo escrever algum código para criar) um valor padrão para esse campo?

Eu quero usar algo como NOW(6)e obter 1442059062.065123por exemplo.

mysql datetime
  • 2 respostas
  • 8167 Views
Martin Hope
Victor
Asked: 2015-08-26 03:58:06 +0800 CST

Implementando sistema de versionamento com MySQL

  • 18

Sei que isso já foi perguntado aqui e aqui , mas tenho a mesma ideia com uma possível implementação diferente e preciso de ajuda.

Inicialmente eu tinha minha blogstoriestabela com essa estrutura:

| Column    | Type        | Description                                    |
|-----------|-------------|------------------------------------------------|
| uid       | varchar(15) | 15 characters unique generated id              |
| title     | varchar(60) | story title                                    |
| content   | longtext    | story content                                  |
| author    | varchar(10) | id of the user that originally wrote the story |
| timestamp | int         | integer generated with microtime()             |

Depois que decidi que queria implementar algum sistema de versionamento para cada história do blog, a primeira coisa que me veio à cabeça foi criar uma tabela diferente para guardar as edições ; depois disso, pensei que poderia modificar a tabela existente para conter versões em vez de edições . Esta é a estrutura que me veio à mente:

| Column        | Type          | Description                                       |
|------------   |-------------  |------------------------------------------------   |
| story_id      | varchar(15)   | 15 characters unique generated id                 |
| version_id    | varchar(5)    | 5 characters unique generated id                  |
| editor_id     | varchar(10)   | id of the user that commited                      |
| author_id     | varchar(10)   | id of the user that originally wrote the story    |
| timestamp     | int           | integer generated with microtime()                |
| title         | varchar(60)   | current story title                               |
| content       | longtext      | current story text                                |
| coverimg      | varchar(20)   | cover image name                                  |

As razões pelas quais eu vim aqui:

  • O uidcampo da tabela inicial era UNIQUE na tabela. Agora, o story_idnão é mais exclusivo. Como devo lidar com isso? (Achei que poderia abordar story_id = xe encontrar a versão mais recente, mas isso parece consumir muitos recursos, então, por favor, dê seu conselho)
  • author_ido valor do campo está se repetindo em cada linha da tabela. Onde e como devo guardá-lo?

Editar

O processo de geração de códigos únicos está na CreateUniqueCodefunção:

trait UIDFactory {
  public function CryptoRand(int $min, int $max): int {
    $range = $max - $min;
    if ($range < 1) return $min;
    $log = ceil(log($range, 2));
    $bytes = (int) ($log / 8) + 1;
    $bits = (int) $log + 1;
    $filter = (int) (1 << $bits) - 1;
    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd = $rnd & $filter;
    } while ($rnd >= $range);
    return $min + $rnd;
  }
  public function CreateUID(int $length): string {
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet.= "0123456789";
    $max = strlen($codeAlphabet) - 1;
    for ($i=0; $i < $length; $i++) {
        $token .= $codeAlphabet[$this->CryptoRand(0, $max)];
    }
    return $token;
  }
}

O código está escrito em Hack e foi originalmente escrito em PHP por @Scott em sua resposta .

Os campos author_ide editor_id podem ser diferentes, pois existem usuários com permissões suficientes para editar as histórias de qualquer pessoa.

mysql database-design
  • 3 respostas
  • 14529 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve