Domanda

Use Case

Quando un utente va al mio sito web, che si confronteranno con una casella di ricerca molto simile SO. Essi possono cercare i risultati utilizzando il testo piano. "Domande .net", 'domande chiuse', ".net e Java", ecc .. La ricerca funziona un po 'diverso che SO, in quanto cercherà di quanto più possibile dello schema del database, piuttosto che una dritto ricerca full-text. Quindi, "le domande .net" cercherà solo per questioni .net in contrapposizione NET risposte (probabilmente non applicabile a SO caso, solo un esempio qui), 'domande chiuse' restituirà le domande che sono chiuse, ".net e Java" domande torneranno domande che si riferiscono a .NET e Java e nient'altro.

Problema

Io non sono troppo familiarità con le parole, ma io fondamentalmente voglio fare una parola chiave a SQL di ricerca guidato. So che lo schema del database e ho anche possibile Datamine il database. Voglio sapere eventuali approcci attuali c'è quello esistente fuori già prima che io cerco di implementare questo. Credo che questa domanda è per quello che è un buon progetto per il problema indicato.

Proposto

La mia soluzione proposta sembra così lontano qualcosa di simile

  1. Pulire l'ingresso. Basta rimuovere eventuali caratteri speciali
  2. Analizzare l'ingresso in blocchi di dati. Rompere un ingresso di "c # java" in C # e Java gestire anche i casi speciali come "domande 'c # java'" in 'c # java' e "domande".
  3. Costruire un albero fuori dalla ingresso
  4. associare i dati in metadati. Quindi convertire roba come domande chiuse e si riferiscono alla colonna IsClosed di una tabella.
  5. Convertire l'albero in una query SQL.

Pensieri / suggerimenti / link?

È stato utile?

Soluzione

Ho eseguito un negozio di musica digitale con una "ricerca single" che pesi le parole chiave in base alle loro occorrenze e lo schema in cui compaiono i prodotti, ad esempio. con colonne diverse, come "Artista", "Titolo" o "Publisher".

I prodotti sono anche in relazione agli album e playlist, ma per la spiegazione più semplice, io elaboreranno solo l'indicizzazione e l'interrogazione dei prodotti parole chiave.

Database Schema

Tavolo Keywords - un tavolo ponderata per ogni parola che potrebbe essere cercato (e quindi, si fa riferimento da qualche parte) con i seguenti dati per ogni record:

  • keyword (non la parola),
  • La parola stessa,
  • Un valore Soundex Alpha per la parola
  • peso

Tavolo ProductKeywords - un tavolo ponderato per ogni parola chiave a cui fa riferimento qualsiasi dei campi di un prodotto (o colonne) con i seguenti dati per ogni record:

  • ID prodotto,
  • keyword,
  • peso

Chiave di ponderazione

Il valore di ponderazione è un'indicazione di come si verifica spesso le parole. Corrispondenti a parole chiave con un peso inferiore sono "più unico" e sono più probabilità di essere ciò che viene cercato. In questo modo, le parole che si verificano spesso sono automaticamente "down-ponderata", ad es. "Il", "a" o "I". Tuttavia, è meglio per togliere occorrenze atomici di queste parole incontrate prima di indirizzamento.

Ho usato per interi ponderazione, ma utilizzando un valore decimale offrirà maggiore versatilità, possibilmente con l'ordinamento leggermente più lenta.

indicizzazione

Ogni volta che qualsiasi campo prodotto viene aggiornato, per esempio. Artista o per titolo (che non accade spesso), le parole chiave di un database trigger di re-indici del prodotto in questo modo all'interno di una transazione:

  1. Tutte le parole chiave dei prodotti sono dissociati e cancellati se non sono più riferimento.
  2. Ogni campo indicizzato (es. Artista) è memorizzato / recuperato come parola chiave nella sua interezza e relativo al prodotto nella tabella ProductKeywords una corrispondenza diretta.
  3. Il peso parola chiave viene incrementato di un valore che dipende dall'importanza del campo. È possibile aggiungere, sottrarre il peso in base all'importanza del campo. Se Artista è più importante titolo, sottrarre 1 o 2 dalla sua regolazione del peso ProductKeyword.
  4. Ogni valore campo indicizzato viene spogliato di tutti i caratteri non alfanumerici e divise in gruppi di parole separati, ad es. "Billy Joel" diventa "Billy" e "Joel".
  5. Ogni gruppo parola separata per ciascun valore di campo viene soundexed e immagazzinato / recuperato come parola chiave e associata al prodotto nello stesso modo dello step 2. Se una parola chiave è già stato associato a un prodotto, il suo peso viene regolata semplicemente .

Interrogazione

  1. Prendere la stringa di ricerca query di input in ogni sua parte e cercare un parola chiave abbinamento diretto. Recupera tutte le ProductKeywords per la parola chiave in una tabella in memoria insieme con il peso Parola (diverso dal peso ProductKeyword).
  2. Striscia fuori tutti i caratteri non alfanumerici e di query suddivisa in parole chiave. Recupera tutte le parole chiave esistenti (solo pochi corrisponderà). Partecipa ProductKeywords a abbinare parole chiave per tabella in memoria insieme con il peso di parola chiave, che è diverso dal peso ProductKeyword.
  3. Ripetere il passaggio 2 ma utilizzare valori soundex invece, regolando i pesi per essere meno rilevante.
  4. Entra ProductKeywords recuperati ai loro prodotti correlati e recuperare le vendite di ogni prodotto, che è una misura della popolarità.
  5. Ordina i risultati per parole chiave peso, il peso ProductKeyword e Vendite. La somma finale / cernita e / o ponderazione dipende dalla vostra applicazione.
  6. limitare i risultati e risultati di ricerca prodotto di ritorno a cliente.

Altri suggerimenti

Quello che state cercando è Natural Language Processing . Stranamente questa utilizzato da includere libero come English Query in SQL Server 2000 e prima. Ma è andato ora

Alcune altre fonti sono:

Il concetto è una meta parole dizionario che mappa i dati alla tabella, colonne, relazioni, ecc e una frase parser inglese combinati insieme per convertire una frase inglese (o solo alcune parole chiave) in una vera e propria domanda

Alcune persone, anche all'utente English Query con il riconoscimento vocale per alcuni demo davvero cool, mai visto in passato con rabbia però!

Se si utilizza SQL Server, si può semplicemente utilizzare il suo Full- Ricerca testo caratteristica, che è specificamente progettato per risolvere il problema.

È possibile utilizzare un approccio ibrido, prendere i risultati di ricerca testo completo e filtrare ulteriormente li in base ai meta dati dal vostro # 4. Per qualcosa di più intelligente si potrebbe creare una soluzione semplice apprendimento supervisionato tracciando quello che collega l'utente fa clic sul dopo la ricerca e memorizzare quella scelta con le parole chiave di ricerca in un albero decisionale. Ricerche sarebbero quindi essere estratti da questo albero decisionale

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top